iframe コンテンツを文字列にコピーし、変更し、iframe で置き換える方法を理解するための手順を次に示します。これらの手順は、Chrome デバッガーで実行することを意図しており、教育/デモンストレーションのみを目的としています。プロセスを理解したら、Web サイトのコードで複製を試みることができます。
Chrome デバッガーで各関数を一度に 1 つずつ実行します。
// test iframe I loaded in a sandbox also at http://example.com
$('body div:first').before('<iframe src="http://example.com/company"></iframe>');
// retrieved the body of the iframe - I cloned it so I could perform operations
// on the copy without bothering the iframe content.
iBody = $('iframe:first').contents().find('body').clone();
// got the head
iHead = $('iframe:first').contents().find('head').html();
// if there is script in the body, it really messes things up. So in my tests,
// I had to remove it before adding it back to the iframe.
iBody.find("script").remove();
// verify there are no script elements
ibody.html();
// replace the iframe head
$('iframe:first').contents().find('head').html(iHead);
// replace the iframe body first with a placeholder. The body is the sensitive
// part. If you destroy the DOM, it can make the entire page, including
// the parent, turn completely white.
$('iframe:first').contents().find('body').html('<div></div>');
// ** inserted something in the copy to prove we modified it!!
iBody.append("<div style='position:absolute;z-index:5000; color:red; " +
"background-color:white;'>JAMES WAS HERE</div>");
// now replace the body
$('iframe:first').contents().find('body').html(iBody);
ウェブサイトの下部、iframe 内に、白い背景に赤いメッセージが表示されました。ソースでも見ることができました:
$('iframe:first').contents().find('body').html();
Chrome のデバッガー コンソールを使用してコマンドを実行し、匿名の Web サイトでこれらのアクションを実行しました。最初のコマンドは、ホームページに iframe を作成し、サイトの企業ページを iframe に作成します。残りのコマンドは、その iframe の head と body を取得し、body を複製し、"JAMES WAS HERE" メッセージのようなものを body clone に追加してから、iframe body をそのコピーで置き換えます。
また、ブラウザーに http://getsatisfaction.com をロードし、iframe にhttp://getsatisfaction.com/explore/product-innovationをロードして、同じ結果を確認しました。上記の手順を繰り返すと、「JAMES WAS HERE」というメッセージが表示されました。
**私が遭遇した最も重大な問題は、コピーに JavaScript または CSS スタイル タグを残すことができないことでした。スタイリングの解決策は、本文を iframe に戻す前にすべてのスタイル変更を行うことです。**
何らかの理由で、ブラウザが JavaScript を実行しようとしてエラーをスローしました。これらのエラーのコンテキストから、JavaScript が iframe コンテキストではなくトップレベル コンテキストで実行されているのではないかと思いました。これはあなたにとってショーストッパーかもしれません。ポップアップ ウィンドウまたはインラインでプレビューを表示するには、別の計画を立てる必要がある場合があります。また、これは異なる JavaScript を使用する異なる Web サイトでは異なる動作をする場合があります。また、IE で奇妙な動作をする場合があります。
要するに、iframe で JavaScript を削除する必要があるため、このソリューションが実稼働 Web サイトをサポートするものであるとは実際には考えていません。ただし、JavaScript を使用するために iframe DOM が必要ない場合は、必要に応じて、本番環境でこれを機能させることができる場合があります。
それでも、これは興味深い問題でした。