###前提・実現したいこと
testA.htmlで、jQuery/Jsonを使用してtestB.htmlのHTMLをまるっと取得しtestA.html内にコピペしようとしています。
※階層は違いますが同一サーバー内です。
▼実現したい流れ
0. inputタグにファイルパスを記入
0. 記入されたファイルパスを変数「filepass」に入れる
0. ajaxを使用して対象ファイルのHTMLを取得
0. 取得で来たら「.hoge」に丸っと貼り付け
0. 読み込んだHTMLをtestA.html上でHTMLの書き換え等の操作を行う(イメージは簡易CMS的な感じ)
0. 書き換えなど作業が終わったら.hoge配下をHTMLファイルとして書き出し(保存)
※保存先はローカルへの保存になります。
js
1var filepass = ($('#filepass').val()); //記入されたファイルパス取得(今回で言うtestB.html) 2 3$.ajax({ 4 url: filepass, 5 type: 'GET', 6 dataType: 'html', 7 success: function (data) { 8 $('.hoge').html(data); //hogeエリアにコードを書き出し 9 }, 10 error: function (data) { 11 $('.error').fadeIn(); //取得できなかったらエラーメッセージを表示 12 } 13});
以下がtestA.html
HTML
1<body> 2 <div class="hoge">ここにtestB.htmlのHTMLが書き出しされる</div> 3 <div class="huga">取得されたあとここで取得したHTMLを書き換えたりする</div> 4 <div class="error" style="display: none;">取得できませんでした。</div> 5</body>
以下がtestB.html
HTML
1<body> 2 <script src="ahan.js"></script> 3 <div class="test">サンプルテキストサンプルテキストサンプルテキスト</div> 4</body>
###発生している問題
結論から申しますと、testB.htmlの「ahan.js」がtestA.html上で発火して不具合を起こしています。
testB.htmlのファイルの内容を丸っと持ってきてしまっているため、HTMLを取得した後testA.htmlの.hogeに出力させてしまうと
testB.html内の「ahan.js」がtestA.html上で発火してしまい本来持ってきたかった素のHTMLではない状態になってしまいます。
最初の「実現したいこと」の項目の6番で、最終的にはHTMLファイルとして書き出したいので
最初に取得したファイルの状態と同じ状態になってほしいのですが、
ahan.jsが発火してしまうため書き出しの際には余計なクラスやスタイルまでもが保存されてしまいます。
試したこと
・testB.htmlを取得した後、いったん.hogeに書き出し、その後Scriptタグのみ削除し残った部分でクローンを作成。
→ダメでした
・preタグ、codeタグで囲む
→当然ダメでした(エスケープも考慮したが、実現したいことの5番が実現できなくなるので却下)
・参考サイトを探して試した
スクリプトでスクリプトを停止させることの難しさ。
動的に特定のScriptタグを削除
→できませんでした
補足情報
上記ではahan.jsのみで質問を上げていますが実際は何十個ものjsファイルが発火してしまっているのでそもそも.hoge配下のScriptタグはすべて実行させないようにする必要があります。
最終的に書き出しの際に一つのファイルにまとまればよいので、必ずしもすべてのHTMLがいったんtestA.htmlに書き出される必要はありません。
さらに.hogeに書き出した内容は画面上には表示しません。なので表示崩れとかそういうのも気にしないのでとにかくHTMLが巣の状態であればうれしいです…!
▼お聞きしたいこと
解決策として以下は実現可能かどうか。
0. testB.htmlからHTMLを取得後すぐ.hogeに書き出すのではなく、jsもしくはajaxそうさで必要な部分だけ抽出することはできるのか
→またそれが可能な場合ファイル書き出しの際に結合可能か
- そもそもtestB.htmlから丸っと取得するのではなく抜粋した部分だけ取得することはできるのか
- 私が考えている方法以外で解決策があればご教示いただければと思います。
※都合上PHP等のサーバーサイド言語の利用ができないため、js・Ajax等で解決したいと考えています。
もしサーバーサイド使わないと無理という内容であればそれも不躾ながらご教示いただければ幸いです。
回答2件
あなたの回答
tips
プレビュー