私はしばらく探していましたが、AJAXを介してページ全体をロードし、それでもすべてのjavascriptとcssを実行する方法を理解できません。
ほとんどの場合、CSSを含まないプレーンテキストになってしまいます。これを行う方法はありますか?jQuery.get、jQuery.load、jQuery.ajaxを試しましたが、実際にはそのように機能するものはありません。
私はしばらく探していましたが、AJAXを介してページ全体をロードし、それでもすべてのjavascriptとcssを実行する方法を理解できません。
ほとんどの場合、CSSを含まないプレーンテキストになってしまいます。これを行う方法はありますか?jQuery.get、jQuery.load、jQuery.ajaxを試しましたが、実際にはそのように機能するものはありません。
私は次のように同様の問題を解決しました。
<script>
それを繰り返して、</script>
タグを見つけます<script>
要素を作成し、そこにコードを挿入しますもう1つは、どういうわけかスクリプトを呼び出す必要があるということです。私は次のように行いました。
initAddedScript
スクリプトをページに追加した後に呼び出すコールバックのような標準化された関数名を設定します。deinitScript
コード(およびその変数、..)が不要になったときに呼び出したのと同じです。
私はこれがひどい解決策であると言わなければなりません、それはおそらくあなたが私が持っていたように悪いアプリケーションアーキテクチャを持っていることを意味します:)
cssでも同じですが、ハンドラーは必要ありません。style
タグをドキュメントヘッドに追加するだけです。
別の解決策があります。で試してみてくださいiframe
。jQueryを使用して、関連するすべてのコードを含むiframeスクリプトをページの一部(一部などdiv
)に追加します。これにより、CSSを含めて次のようになります。
$('<iframe src="your_page.html"/>').appendTo('#your_div');
または、次のようなことを試してみてください。
$('<iframe src="your_page.html"/>').load(function(){
alert('the iframe is done loading');
}).appendTo('#your_div');
ロードするページにスタイルデータがない場合、外部スタイルシートには、呼び出し元のドキュメントに対して正しくない相対パスが含まれている必要があります。これはiFrameではないことを忘れないでください。ドキュメント内で外部ドキュメントをフレーミングしているのではなく、あるドキュメントを別のドキュメントに結合しているのです。
もう1つの問題は、ページ全体をロードすると、、、、、およびタグもロードされることです。doctype
これは、html
最新のブラウザがほとんどの場合に処理しますが、あるドキュメントを別のホールセールに詰め込むのは有効なHTMLではないため、結果は未定義です。そして、これはそれが機能しない3番目の理由に私をもたらします:セクションの外側のCSSリンクは無効であり、あなたの無計画なドキュメント内のコラージュによって引き起こされたセクションの置き忘れです。head
body
head
head
コンプライアンス(および正しいレンダリング)のために私が行うことはこれです。これはSuccessコールバックに実装されます。
link
すべての要素を新しいjQuery要素にコピーします。script
内のすべての内容をコピーしますhead
.html()
ロードされたドキュメントのbody
タグからコンテンツをコピーしますlink
要素(手順1でコピーしたもの)をホストドキュメントに追加しますhead
script
タグを作成し、それも貼り付けhead
ます複雑?ある種、私は推測しますが、本当にAJAXを使用してページ全体をロードしたい場合は、それが唯一のオプションです。また、何をしてもページのJavaScriptに問題が発生します。特に、初期読み込み中に実行されるはずのコードが問題になります。これについてあなたができることは何もありません。問題がある場合は、ソースページを書き直してロードしやすくするか、iFrameをニーズに合わせて作成する方法を理解する必要があります。
そもそも、ホストドキュメントに外部CSSをロードするだけで機能するかどうかを検討する価値もあります。
私はあなたがこのようなものを探していると思います:
your page div --> load --> www.some-site.com
クイック検索の後、最も近い解決策は「And」によるもののようです:ウェブサイトをDIVにロードします
Webサーバーを実行し、proxy.php
次のコンテンツを含むページを作成する必要があります。
次に、JQueryのload()関数は次のようになります。
$("#your_div_id").load("proxy.php?url=http://some-site.com");
NB。私はこのソリューションをテストしましたが、ターゲットページからすべてのCSSをロードする必要はありません。おそらく、それらを再作成する必要があります。たとえば、リモートサーバーに保存されている画像ファイルはロードされません。認証ポリシーが原因だと思います。
また、対象サイトを閲覧することなく、対象ページのみを閲覧することができます。
とにかく、これがあなたの解決策への一歩になることを願っています。
ajaxを使用してWebページ全体をテキストとして取得する
document.open();
document.write(this.responseText);
document.close();
また
document.documentElement.outerHTML = this.responseText;
ただし、結果のWebページが別のディレクトリにある場合は、元のWebページのcssページとjsページのパスを変更する必要があります。