#ontop {
position: absolute;
width: 100%;
height: 10%;
top: 0;
bottom: 90%;
background-color: yellow;
}
#content {
position: absolute;
width: 100%;
height: 90%;
top: 10%;
bottom: 0;
border: 0;
}
上記の CSS を使用して、#content
DOM 要素内に外部 Web サイトをロードして、ユーザーがそれを閲覧できるようにすることは可能ですか? この#ontop
要素は、現在ロードされている Web サイトにいくつかの追加機能を提案できます。
iframe
通常、私が望むように動作します:
<div id="ontop">Always on top</div>
<iframe id="content" src="http://en.wikipedia.org/"></iframe>
iframe
ただし、一部の Web サイト (Stack Overflow など) は、セキュリティ上の理由から 内のコンテンツへのアクセスを避けています。
<div id="ontop">Always on top</div>
<iframe id="content" src="http://www.stackoverflow.com/"></iframe>
上記のスニペットは Web サイトのコンテンツをロードしませんが、次のエラーをスローします: X-Frame-Options によって表示が禁止されているため、ドキュメントの表示を拒否しました。
次に、AJAX で自分のニーズに合わせようとしました ( jQuery でクロスドメイン AJAX リクエストを許可するには、この modを参照してください):
<script type="text/javascript">
$(function() {
$.ajax({
url: 'http://www.stackoverflow.com/',
type: 'GET',
success: function(data) {
$("#content").html(data.responseText);
}
});
});
</script>
<div id="ontop">Always on top</div>
<div id="content"></div>
2 つの問題が発生するため、これはほとんど機能します。
- 複雑な Web サイト (Stack Overflow など) ではレンダリングが失敗します。
- URL (リンク、リクエストなど) が上記のスクリプトを実行しているサーバーに関連しているため、ユーザーはロードされた Web サイトを閲覧できません。
私はついに最初の2つのソリューションを組み合わせようとしました:
<script type="text/javascript">
$(function() {
$.ajax({
url: 'http://www.stackoverflow.com/',
type: 'GET',
success: function(data) {
$("#content").contents().find('body').append(data.responseText);
}
});
});
</script>
<div id="ontop">Always on top</div>
<iframe id="content"></iframe>
これは少し良いです:
- レンダリングの失敗が少なくなります(たとえば、Google はまだ失敗していますが、スタック オーバーフローはもうありません)。
- URL はまだ間違っています。
どうすれば私の目標を達成できますか? これらの相対 URL を管理するソリューション、または私のニーズに合ったまったく別のソリューションのいずれかを歓迎します。
jsFiddle は、このような複雑な非同期リクエストに対して十分に強力ではないため、私が提供した 3 つの試みのソース コードを以下に示します。
- 使用
iframe
: iframe.html - AJAX の使用: ajax.html
- 両方を使用: both.html