使用Greasemonkey和jQuery加载远程URL
我正在尝试从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
,此用户脚本运行正常,但在任何其他域上都没有错误或警报。 解决办法是什么?
只有GM_xmlhttpRequest
可以进行跨站点访问,而不是jQuery使用的普通XMLHttpRequest 。
在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
是的,你做不到。 它叫做XSS
您可以尝试load(URL, [data], [func])
。
我在一个示例应用程序中使用它,它加载了Google搜索我,即使它在另一个域上。 有一个缺点,当您尝试访问另一个域时,将发生JavaScript安全警报。
我希望它有所帮助!
PS我实际上尝试过非谷歌域名并收到一些错误。 但我发现错误是因为页面与收到的响应内容不兼容(JavaScript错误等)。 我确实发现一些页面成功执行,我在另一个域中创建。 所以你必须注意你也加载了什么样的内容。
可能在这种情况下,在iframe中加载内容对您来说会更好。