【问题标题】:Load remote URL with Greasemonkey and jQuery使用 Greasemonkey 和 jQuery 加载远程 URL
【发布时间】:2012-04-14 16:57:18
【问题描述】:

我正在尝试从 Greasemonkey 脚本中执行 Ajax 查询,但我无法从远程 URL 加载数据。只有当正在查看的页面与 Ajax 调用在同一个域时,该脚本才会起作用。示例:

// ==UserScript==
// @name          Hello jQuery
// @namespace     http://www.example.com/
// @description   jQuery test script
// @include       *
// @require       http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js
// ==/UserScript==

$(document).ready(function() {
    $.get("http://www.google.com", function(data){
        alert("Data Loaded: " + data);
    });
});

// EOF

此用户脚本在访问 google.com 时运行良好,但在任何其他域上都不会出现错误或警报而失败。解决办法是什么?

【问题讨论】:

    标签: jquery greasemonkey


    【解决方案1】:

    只有GM_xmlhttpRequest可以做跨站访问,不是jQuery使用的普通XMLHttpRequest

    【讨论】:

    • 但是如果你想使用通常的东西来解析它,你仍然可以获取 responseText 并将其输入 jQuery:$(responseText)
    【解决方案2】:

    在 Greasemonkey 中,有一个名为 GM_xmlhttpRequest 的函数用于 XMLHttpRequest。但是,它不符合XmlHttprequest 接口。因此,不能将它与 jQuery 一起使用。这适用于 jQuery 1.5。

    Greasemonley 中的 jQuery Ajax 如下所示:

    $.ajax({
        url: '/p/',// this even works for cross-domain requests by default
        xhr: function(){ return new GM_XHR(); },
        type: 'POST',
        success: function(val){
            ...
        }
    });
    

    来源:http://www.monperrus.net/martin/greasemonkey+jquery+and+xmlhttprequest+together

    【讨论】:

      【解决方案3】:

      是的,你不能那样做。它叫XSS

      【讨论】:

      • Greasemonkey 的 XHR 版本,GM_xmlhttpRequest 不受防止 XSS 的同源策略的约束。
      【解决方案4】:

      你可以试试load(URL, [data], [func])

      我在a sample application 中使用过它,它为我加载了 Google 搜索,即使它位于另一个域中。有一个缺点是,当您尝试访问另一个域时会出现 JavaScript 安全警报。

      希望对你有帮助!

      附:我实际上尝试了一个非 Google 域并收到了一些错误。但我发现,出现错误是因为页面与收到的响应内容不兼容(JavaScript 错误等)。我确实发现一些页面执行成功,是我在另一个域中创建的。因此,您还必须注意加载的内容类型。

      在这种情况下,将内容加载到 iframe 中可能更适合您。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多