【发布时间】:2017-03-30 03:30:35
【问题描述】:
简而言之,我不想将警报 URL 和响应正文发送到我的应用程序。此代码有效,但除非我同意,否则我不能使用 GM_xmlhttpRequest。
什么都不改变,代码就会神奇地中断。我不确定发生了什么变化以及如何修复它。我以为我可以使用console.log 并将数据复制/粘贴到我的应用程序中,但是 Facebook 禁用了 console.log。
我想过做 xmlhttpRequest 但这也以某种方式被阻止了。我通过在控制台中执行代码进行了测试。除了 Facebook 域之外,这 3 行似乎在任何地方都有效。我认为这与 CORS 有关。
// ==UserScript==
// @name FBTest
// @namespace test
// @include https://*.facebook.com/*
// @version 1
// @grant none
// ==/UserScript==
//change none to GM_xmlhttpRequest
(function() {
var proxied = window.XMLHttpRequest.prototype.open;
window.XMLHttpRequest.prototype.open = function(method, url) {
alert(url);
return proxied.apply(this, [].slice.call(arguments));
};
})();
【问题讨论】:
-
使用
GM_xmlhttpRequest而不是window.XMLHttpRequest -
@Mottie - 代码试图“拦截” XMLHttpRequest 的打开函数,而不是实际使用 XMLHttpRequest
-
问题源于这样一个事实,即任何带有@grant anything other than none 的脚本都在更安全的范围内运行。我最初认为您可以使用 unsafeWindow 而不是 window - 但是,这也不起作用,因为
.open然后由于您的open代码在其中运行的特权范围而从页面中呈现为不可用。 -
使用Add-on SDK 甚至WebExtensions 会更幸运
标签: javascript facebook greasemonkey userscripts tampermonkey