2 つの Web ページがあります。最初のページで、フォームを送信する必要があります。フォームの値を (埋め込み JavaScript コードを使用して) 使用して、別の JavaScript ファイルを生成し、この生成された JavaScript ファイルを次のページで使用する必要があります。これはどのように行うことができますか?または、これを行うより良い方法はありますか?
3 に答える
同じ出身地?
同じオリジンのドキュメントは、常に相互にやり取りできます。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 を相手に渡して、そのスクリプトを実行させることができます。受信側でこのようなソリューションを実装する方法の詳細については、このスタックオーバーフローの質問と彼の関連する回答を参照してください。
もちろん、これらはいくつかの短い例にすぎません。残りはググってください。少なくともパスを選択するのに役立つことを願っています。
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 をご覧ください。