4

2 つの Web ページがあります。最初のページで、フォームを送信する必要があります。フォームの値を (埋め込み JavaScript コードを使用して) 使用して、別の JavaScript ファイルを生成し、この生成された JavaScript ファイルを次のページで使用する必要があります。これはどのように行うことができますか?または、これを行うより良い方法はありますか?

4

3 に答える 3

11

同じ出身地?

同じオリジンのドキュメントは、常に相互にやり取りできます。1 つのウィンドウまたはフレーム内のコードが別のウィンドウまたはフレームを参照でき、それらが同じオリジンである場合、1 つの実行コンテキスト (ウィンドウまたはフレーム..!) 内の JavaScript が他のウィンドウまたはフレームと対話できます。!Windowを呼び出すと、外部オブジェクトへの参照が戻り値として取得されます。window.open()したがって、その参照を使用して、そのウィンドウに必要な変数を設定したり、新しいスクリプトを自由にロードしたりできます。

クロス ドキュメント メッセージング

ドキュメントが同じオリジンでない場合、または他の実行コンテキストへの参照がない場合は、HTML5 で導入された新しい API を使用する必要があります。これは「postMessage API」と呼ばれ、驚くほどよくサポートされています。IE8でも対応!

この機能がブラウザでサポートされているかどうかを確認する簡単な方法を次に示します。

if (typeof window.postMessage !== undefined)
    console.log("postMessage API is supported!");

以下は、ダミーの受信者にhello worldテキストを送信する方法の例です。

window.postMessage("Hello world", "www.dummy.com");

そして、別の場所でホストされている別の JavaScript でそのようなメッセージをリッスンする方法を次に示します。

window.addEventListener("message", function(event) {
    if (event.origin === "www.dummy.com")
        console.log("Received message: " + event.data);
    }, true);

IE11 にはこれに関するいくつかの問題がある可能性があり、以前のバージョンではまったくサポートされていません。

JavaScript を動的にロードする

2 つの間の通信チャネルの確立に成功し、単純なデータを渡すだけでは不十分な場合はいつでも、本格的な JavaScript を相手に渡して、そのスクリプトを実行させることができます。受信側でこのようなソリューションを実装する方法の詳細については、このスタックオーバーフローの質問と彼の関連する回答を参照してください。

もちろん、これらはいくつかの短い例にすぎません。残りはググってください。少なくともパスを選択するのに役立つことを願っています。

于 2013-08-01T21:28:45.417 に答える
1

Blob を使用して、探していることを実行できます。ただし、別のページで実際に JavaScript を実行するには、そのページの HTML も必要です。

動作するあまりきれいではない例...

var script = function callme(){alert('hi!');};
var html = '<!DOCTYPE html><html><head><script type="text/javascript">'+script.toString()+'</script><body><a onclick="callme();return false;" href="javascript:void(0);">Click me!</a></body></html>';
window.open(URL.createObjectURL(new Blob([html],{type:'text\/html'})));

ただし、Chrome 20 以降、Firefox 13 以降、IE 10 以降、Safari 6 以降など、最近のブラウザーでのみ機能します。Blob の詳細については、https ://developer.mozilla.org/en-US/docs/Web/API/Blob をご覧ください。

于 2013-08-01T21:15:00.390 に答える