我正在尝试从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
时效果很好,但在任何其他域上都没有错误或警告。解决方案是什么?
答案 0 :(得分:4)
只有GM_xmlhttpRequest
才能进行跨网站访问,而不是jQuery使用的普通XMLHttpRequest。
答案 1 :(得分:0)
在Greasemonkey中,XMLHttpRequest有一个名为GM_xmlhttpRequest
的函数。但是,它不符合XmlHttprequest
接口。因此,不可能将它与jQuery一起使用。这适用于jQuery 1.5。
$.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)
答案 3 :(得分:-1)
您可以尝试load(URL, [data], [func])
。
我在a sample application中使用过它,即使它在另一个域上,也会加载Google搜索我。当您尝试访问其他域时,会出现JavaScript安全警报。
我希望它有所帮助!
P.S。我实际上尝试过非Google域名并收到一些错误。但我发现,错误是因为页面与收到的响应内容不兼容(JavaScript错误等)。我确实发现一些页面成功执行,我在另一个域中创建。所以你必须注意你也加载了哪种内容。
在这种情况下,在iframe中加载内容可能会更好。