1

我正在尝试从 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,但在任何其他域上都不会出现错误或警报而失败。解决办法是什么?

4

4 回答 4

4

只能GM_xmlhttpRequest做跨站访问,不能做jQuery使用的普通XMLHttpRequest

于 2009-04-08T01:00:26.067 回答
0

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

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

于 2012-01-08T23:32:20.637 回答
-1

是的,你不能那样做。它被称为XSS

于 2009-04-08T00:58:04.747 回答
-1

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

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

我希望它有帮助!

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

可能在这种情况下,将内容加载到 iframe 中对您来说会更好。

于 2009-05-27T05:25:08.883 回答