问题 来自Google Chrome中用户脚本的跨源XHR


有没有人有幸从谷歌浏览器的用户脚本执行跨源XHR?请求进入服务器(我可以在日志中看到它们),但是, readystatechanged 事件永远不会被解雇

扩展权限似乎没有成功。 JSONP也不是。


12476
2017-12-20 19:04


起源

根据 code.google.com/chrome/extensions/xhr.html 如果您将用户脚本包装在扩展中,则扩展清单可以允许用户脚本生成XSS XHR。 - bzlm
感谢您的回复,我确实读过这个。这种方法的问题是我不能在userscripts.org上托管它,并期望它像其他脚本一样直接工作。 - Pranav


答案:


目前的Chrome版本(13.0.781或更高版本)现在支持大部分或全部版本 GM_xmlhttpRequest()文件 功能 - 包括跨域请求
看到 问题18857:在内容脚本中支持跨站点XMLHttpRequest

所以这个脚本现在在Chrome(当然还有Firefox)上运行得非常好:

// ==UserScript==
// @name            _Cross domain (XSS) GM_xmlhttpRequest, Chrome too
// @include         http://stackoverflow.com/*
// @grant           GM_xmlhttpRequest
// ==/UserScript==

GM_xmlhttpRequest ( {
    method:     "GET",
    url:        "http://www.google.com/",
    onload:     function (response) {
                    console.log (   response.status,
                                    response.responseText.substring (0, 80)
                                );
                }
} );


(安装该脚本,然后浏览任何SO页面。该脚本会将Google主页的前80个字符写入控制台。)


9
2017-09-17 06:31



谢谢。我没有多年来看过我的用户脚本,这绝对让我有理由确保它与Chrome兼容。 - Pranav
请注意,这仅适用于 @require (就像上面一样), 不是为了 @match。后者会抛出 XMLHttpRequest cannot load [...] Origin chrome-extension://[...] is not allowed by Access-Control-Allow-Origin. - Arjan


从Chrome 13开始,如果您在清单中包含对网站的权限,则可以在内容脚本中执行跨源请求。

Chrome中的用户脚本是内容脚本。内容脚本无法制作跨源XHR。如果您希望进行跨源XHR,则应在扩展页面(背景,弹出窗口,选项)中完成。

欲了解更多信息: http://code.google.com/chrome/extensions/content_scripts.html http://code.google.com/chrome/extensions/xhr.html


5
2017-12-24 08:19



从Chrome 13.0.781开始,此答案现已过时。 - Brock Adams