使用Greasemonkey和jQuery加载远程URL

时间:2009-04-08 00:54:58

标签: jquery greasemonkey

我正在尝试从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 个答案:

答案 0 :(得分:4)

只有GM_xmlhttpRequest才能进行跨网站访问,而不是jQuery使用的普通XMLHttpRequest

答案 1 :(得分:0)

在Greasemonkey中,XMLHttpRequest有一个名为GM_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

答案 2 :(得分:-1)

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

答案 3 :(得分:-1)

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

我在a sample application中使用过它,即使它在另一个域上,也会加载Google搜索我。当您尝试访问其他域时,会出现JavaScript安全警报。

我希望它有所帮助!

P.S。我实际上尝试过非Google域名并收到一些错误。但我发现,错误是因为页面与收到的响应内容不兼容(JavaScript错误等)。我确实发现一些页面成功执行,我在另一个域中创建。所以你必须注意你也加载了哪种内容。

在这种情况下,在iframe中加载内容可能会更好。