【问题标题】:Google Chrome, Same-Origin Policy killing Tampermonkey script谷歌浏览器,同源策略杀死 Tampermonkey 脚本
【发布时间】:2012-11-09 05:13:30
【问题描述】:

我自己编写了一个脚本,它使用 jQuery Ajax 函数在我访问网页时记录一些来自网页的数据。它需要一些信息并将其发送到我的本地 Apache 主机以保存在文本文件中。

它工作了几个月,但我现在收到与此同源策略相关的错误(我知道它的工作原理及其用途),并且浏览器现在正在结束显示此消息的脚本执行:

The page at https://www.website.com/ displayed insecure content from
http://127.0.0.1:8081/whatever.php

接下来是:

Refused to connect to connect 'http://127.0.0.1:8081/whatever.php?arguments=1' because it 
violates the following Content Security Policy directive: "connect-src
https://www.website.com/* https://*.website.com/
https://*.website.net xhr: error: SECURITY_ERR: DOM Exception 18 

最后一个域在错误消息中以 红色 着色。一个奇怪的细节是,在 Tampermonkey 上的 JavaScript 代码中,我有这些域的 @includes,但没有红色标记的域。我已经添加并测试了,但是没有用。

我在 Google 上找到的每个讨论都告诉我如何禁用此策略,但如果您正在开发扩展程序,那不是我的情况。

这段代码只会在我的机器上运行,我无意以任何方式分发它,因此任何解决方案都会受到赞赏,即使解决方案是直接更改浏览器配置。

如果这有用,我使用的是 Windows 7。

【问题讨论】:

    标签: javascript jquery google-chrome greasemonkey tampermonkey


    【解决方案1】:

    Tampermonkey Beta fixed its GM_xmlHttpRequest to be independent from the page's CSP.
    不幸的是,它无法修复 jQuery AJAX 请求,因为它不知道要联系哪些网站。

    如果您联系的页面是 Facebook,则为 the CSP is sent only to Chrome 21-23, but not Chrome 24.,因此您可以使用 Tampermonkey's @user-agent tag 模拟 Chrome 24。

    【讨论】:

      【解决方案2】:

      您不需要上面的任何东西。您在 ajax 调用中所要做的就是添加

      script.php?callback=?&your_parametars_here

      在 php 文件中你只需要在检索数据时添加这个:

      echo $_GET['callback'].$your_data_here
      

      就是这样!

      【讨论】:

        【解决方案3】:

        在您的本地服务器上,您要将数据发送到的whatever.php,设置CORS(即发送标头Access-Control-Allow-Origin: *)。

        【讨论】:

          猜你喜欢
          • 2013-05-18
          • 2011-06-06
          • 2011-04-26
          • 1970-01-01
          • 1970-01-01
          • 2011-05-04
          • 2014-05-29
          • 1970-01-01
          • 2012-09-25
          相关资源
          最近更新 更多