利用多页面共享的脚本,
可以实现利用油猴跨域共享页面数据。
// ==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...
})();
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。