使用 grease monkey 脚本实现轮询
Implement polling with grease monkey script
我想在 Facebook 页面上执行篡改猴子脚本,该脚本会定期轮询数据库以获取数据并执行一些操作。我尝试用 ajax 实现轮询,下面是它的代码
(function poll() {
setTimeout(function() {
$.ajax({
url: "xyz",
headers: {
'Content-Type': 'application/json',
'x-apikey': apiKey,
'cache-control': 'no-cache'
},
type: "GET",
success: function(data) {
// check if null return (no results from API)
if (data == null) {
console.log('no data!');
} else {
console.log(data);
},
dataType: "json",
complete: poll,
timeout: 2000
});
}, 3000);
})();
但是当我执行脚本时,出现以下错误
Refused to connect to 'xyz' because it violates the following Content Security Policy directive: "connect-src *.facebook.com facebook.com *.fbcdn.net *.facebook.net .spotilocal.com: .akamaihd.net wss://.facebook.com:* https://fb.scanandcleanlocal.com:* .atlassolutions.com attachment.fbsbx.com ws://localhost: blob: *.cdninstagram.com 'self' chrome-extension://boadgeojelhgndaghljhdicfkmllpafd chrome-extension://dliochdbjfkdbacpmhlcpmleaejidimm".
我知道这个错误是因为 facebook 定义的内容安全策略指令。
有什么方法可以实现轮询吗?我还检查了 grease monkey GM.xmlHttpRequest 但除了使用 ajax.
之外我找不到实现轮询的方法
如果有人能提供帮助,我将不胜感激
我认为您收到的错误与跨域策略有关。 Greasemonkey/Tampermonkey 用户脚本的 GM_xmlhttpRequest
跨域工作,因此您需要使用 GM_xmlhttpRequest
而不是 $.ajax
。我已经尝试用 GM_xmlhttpRequest
公式重写你上面的代码,所以你可以了解它是如何翻译的:
var pollTimer = setInterval(function() {
try {
GM_xmlhttpRequest({
method: "GET",
url: "xyz",
headers: {'Content-Type': "application/json",
'x-apikey':apiKey,
'cache-control': "no-cache"},
onload: function(data){
// check if null return (no results from API)
if (data === null) { // <-- note that you should use === rather than == for checking against null
console.log('no data!');
} else {
console.log(data); // if data in json format, will instead need console.log(JSON.stringify(data)) here
}
},
onerror: function(err) {
console.log('crap! an error! ' + err);
}
});
if (some condition exists that you would like polling to stop) {
clearInterval(pollTimer);
}
} catch(e) {};
}, 3000); // check every 3000 milliseconds
我想在 Facebook 页面上执行篡改猴子脚本,该脚本会定期轮询数据库以获取数据并执行一些操作。我尝试用 ajax 实现轮询,下面是它的代码
(function poll() {
setTimeout(function() {
$.ajax({
url: "xyz",
headers: {
'Content-Type': 'application/json',
'x-apikey': apiKey,
'cache-control': 'no-cache'
},
type: "GET",
success: function(data) {
// check if null return (no results from API)
if (data == null) {
console.log('no data!');
} else {
console.log(data);
},
dataType: "json",
complete: poll,
timeout: 2000
});
}, 3000);
})();
但是当我执行脚本时,出现以下错误
Refused to connect to 'xyz' because it violates the following Content Security Policy directive: "connect-src *.facebook.com facebook.com *.fbcdn.net *.facebook.net .spotilocal.com: .akamaihd.net wss://.facebook.com:* https://fb.scanandcleanlocal.com:* .atlassolutions.com attachment.fbsbx.com ws://localhost: blob: *.cdninstagram.com 'self' chrome-extension://boadgeojelhgndaghljhdicfkmllpafd chrome-extension://dliochdbjfkdbacpmhlcpmleaejidimm".
我知道这个错误是因为 facebook 定义的内容安全策略指令。
有什么方法可以实现轮询吗?我还检查了 grease monkey GM.xmlHttpRequest 但除了使用 ajax.
之外我找不到实现轮询的方法如果有人能提供帮助,我将不胜感激
我认为您收到的错误与跨域策略有关。 Greasemonkey/Tampermonkey 用户脚本的 GM_xmlhttpRequest
跨域工作,因此您需要使用 GM_xmlhttpRequest
而不是 $.ajax
。我已经尝试用 GM_xmlhttpRequest
公式重写你上面的代码,所以你可以了解它是如何翻译的:
var pollTimer = setInterval(function() {
try {
GM_xmlhttpRequest({
method: "GET",
url: "xyz",
headers: {'Content-Type': "application/json",
'x-apikey':apiKey,
'cache-control': "no-cache"},
onload: function(data){
// check if null return (no results from API)
if (data === null) { // <-- note that you should use === rather than == for checking against null
console.log('no data!');
} else {
console.log(data); // if data in json format, will instead need console.log(JSON.stringify(data)) here
}
},
onerror: function(err) {
console.log('crap! an error! ' + err);
}
});
if (some condition exists that you would like polling to stop) {
clearInterval(pollTimer);
}
} catch(e) {};
}, 3000); // check every 3000 milliseconds