利用多页面共享的脚本,
能够实现利用油猴跨域共享页面数据。
// ==UserScript==
// @name 跨页面数据传输脚本
// @namespace http://tampermonkey.net/
// @version 0.1
// @description 利用共用脚本实现跨域通信
// @connect *
// @author dzt
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_removeValueChangeListener
// @grant GM_addValueChangeListener
// @run-at document-end
// @match 页面 A
// @include 页面 B
// @include 页面 C
// ==/UserScript==
(function() {
'use strict';
unsafeWindow.__t_sendCrossDomainMessage= function(data){
let __source = location.href;
let __domain = document.domain;
// 利用 createObjectURL 生成不反复的 uuid
const __url = URL.createObjectURL(new Blob());
const uuid = __url.substring(__url.lastIndexOf('/') + 1);
console.log('生成新的 crossDomainMessage-uuid:',uuid);
GM_setValue('data',data);
GM_setValue('source',__source);
GM_setValue('domain',__domain);
GM_setValue('uuid',uuid);// 触发数据变更
}
//ValueChangeListener 须要应用值类型的变动来触发,这里应用了 uuid 字符串触发
//fn 可选退出数据源判断
unsafeWindow.__t_onReceiveCrossDomainMessage = function(fn){GM_removeValueChangeListener('uuid');
GM_addValueChangeListener('uuid',(name,oldValue,newValue,remote)=>{//console.log(name,oldValue,newValue,remote);
console.log('crossDomainMessage-uuid 已扭转','crossDomainMessage-uuid is Change!!');
let uuid = newValue;
let data = GM_getValue('data');
let source = GM_getValue('source');
let domain = GM_getValue('domain');
return fn({uuid,data,source,domain,source});
})
}
// Your code here...
})();