Web サイトを変更する JavaScript エクステンションを作成しています。エクステンションは Web サイトにボタンを追加し、クリックするとページのコンテンツを変更します。私のスクリプトは、クロスドメインの xmlhttprequests を websiteB に送信する必要があり、インストール時にそのためのアクセス許可を取得します。
私の問題は、変更中の Web サイトのコンテンツ スコープで実行されるコードが、Web ページのコンテンツ スコープ内にあるため、クロス ドメイン リクエストを実行する権限がないことです。また、メイン拡張コードと、ページのボタン クリック時に実行されるコードとの間で変数を簡単に渡すこともできません。
これらは私のコードの関連部分です:
// ==UserScript==
// @include http://www.WebsiteB.com/*
// @match http://www.WebsiteB.com/*
// ==/UserScript==
var a = 1;
button.innerHTML = '<a href="javascript:void(0)" onclick="myFunc();">clickMe</a>';
menu.appendChild(button);
contentEval(function() {
myFunc = function() {
//a is undefined
//this part does not have cross domain request permission
};
}
http://wiki.greasespot.net/Content_Script_Injectionから取得したcontentEval を使用して、スクリプトが実行されているページとやり取りできる関連コードを取得します。それがなければ、Web サイトのボタンから myFunc を呼び出すことはできません。また、myFunc(a) を使用して変数を直接渡すことによって、メイン コード領域から myFunc() に変数を転送することもできません。myFunc(1) は機能しますが、私のニーズには合いません。
私が間違った方法で物事を進めている可能性があります。もしそうなら、私に教えてください。
Web ページと対話するコードからクロス ドメイン アクセス許可を取得する方法はありますか? そうでない場合、メイン コード領域からページのコンテンツ スクリプトにメッセージを渡すには何を使用すればよいですか?