2009-04-08 13 views
1

Greasemonkeyスクリプト内からAjaxクエリを実行しようとしていますが、リモートURLからデータをロードできないという問題があります。スクリプトは、表示されているページがAjax呼び出しと同じドメインである場合にのみ機能するようです。例:GreasemonkeyとjQueryでリモートURLをロード

// ==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

GM_xmlhttpRequestは、jQueryが使用する通常のXMLHttpRequestではなく、クロスサイトアクセスのみ可能です。

+0

しかし、あなたはそれを解析するために通常のものを使いたい場合でも、responseTextをjQueryに送ることができます:$(responseText) – Plutor

0

ええ、それはできません。 XSS

+2

するGreasemonkeyのバージョン、[GM_xmlhttpRequest](http://wiki.greasespot.net/GM_xmlhttpRequest)は対象ではありませんXSSを防止する同じ発信元ポリシー。 – Ryan

0

load(URL, [data], [func])を試すことができます。

私はa sample applicationに使っていますが、それは別のドメイン上にあっても私のためにGoogle検索をロードしました。欠点は、別のドメインにアクセスしようとするとJavaScriptセキュリティ警告が表示されることです。

私はそれが助けてくれることを願っています!

P.S.私は実際にGoogle以外のドメインを試し、いくつかのエラーを受けました。しかし、私は、ページが応答内容(JavaScriptエラーなど)と互換性がないためにエラーが発生していることがわかりました。いくつかのページが正常に実行され、別のドメインで作成されたことがわかりました。だから、どのような種類のコンテンツを読み込むべきかを気にする必要があります。

おそらく、そのような場合、iframeにコンテンツを読み込むほうがよいでしょう。

1

Greasemonkeyには、XMLHttpRequestGM_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){ 
     ... 
    } 
}); 

出典:XHRのhttp://www.monperrus.net/martin/greasemonkey+jquery+and+xmlhttprequest+together

関連する問題