たとえば、iframeドメインiframe.netのiframeが埋め込まれたexample.comというサイトがある場合、iframeのコンテンツを読み取り、テキストメッセージを表示するためのパラメーターを渡したいと考えています。こんにちは、ユーザー名で。
今、問題はこれが2つを接続できないことであり、iframe iのinnerHTMLを取得することもできません
document.getElementById('myframe').contentWindow.document.body.innerHTML;
「プロパティへのアクセス許可が拒否されました」というエラーがスローされます
誰もがクロスドメインプラットフォームで読み書きする方法を知っていますか
フレーム化されたサイトを制御できない場合、クロスドメインポリシーを回避することはできません。
両方のサイトを制御できる場合は、 postMessage
メソッドを使用して、異なるドメイン間でデータを転送できます。非常に基本的な例:
// framed.htm:
window.onmessage = function(event) {
event.source.postMessage(document.body.innerHTML, event.Origin);
};
// Main page:
window.onmessage = function(event) {
alert(event.data);
};
// Trigger:
// <iframe id="myframe" src="framed.htm"></iframe>
document.getElementById('myframe').contentWindow.postMessage('','*');
Internet Explorer 8では、パラメーターとして渡されるイベントはnullになる可能性があるため、別の方法でイベントにアクセスする必要があります。
frame.html:
window.onmessage = function(event) {
var evt = event || window.event;
evt.source.postMessage('Message from iFrame', evt.Origin);
};
オンmain.html:
window.onmessage = function(event) {
var evt = event || window.event;
alert(evt.data);
};
このイベントは、Rob Wが提示したのと同じ方法でトリガーされます。
document.getElementById('frameId').contentWindow.postMessage('message','*');
クロスドメインのiframe要素は、(srcDoc)でReactにアクセスします):-
<iframe srcDoc={this.state.HTML} width='100%' id='iframetnd' onLoad={this.onclickinsideiframe}/>
onclickinsideiframe=()=>{
if(document.getElementById('iframetnd')!==null){
let iframe = document.getElementById('iframetnd');
let innerDocument = (iframe.contentDocument)
? iframe.contentDocument
: iframe.contentWindow.document;
let Obj = innerDocument.getElementsByClassName("navButtons")[0];
if(Obj !== undefined){
Obj.onclick = ()=>this.func();
}
}
}
func=()=>{
this.setState({page:2})
this.arrangeTest();
}
iFrameでは、クロスドメインプラットフォームのコンテンツにアクセスできません。 iFrameが同じドメインを使用している場合にのみアクセスできます。
このソリューションは、iFrameと同じように機能します。他のWebサイトからすべてのコンテンツを取得できるPHPスクリプトを作成しました。最も重要な部分は、カスタムjQueryをその外部コンテンツに簡単に適用できることです。次のスクリプトを参照してください他のWebサイトからすべてのコンテンツを取得し、cusom jQuery/JSを同様に適用できます。このコンテンツは、どこでも、どの要素やページでも使用できます。
<div id='myframe'>
<?php
/*
Use below function to display final HTML inside this div
*/
//Display Frame
echo displayFrame();
?>
</div>
<?php
/*
Function to display frame from another domain
*/
function displayFrame()
{
$webUrl = 'http://[external-web-domain.com]/';
//Get HTML from the URL
$content = file_get_contents($webUrl);
//Add custom JS to returned HTML content
$customJS = "
<script>
/* Here I am writing a sample jQuery to hide the navigation menu
You can write your own jQuery for this content
*/
//Hide Navigation bar
jQuery(\".navbar.navbar-default\").hide();
</script>";
//Append Custom JS with HTML
$html = $content . $customJS;
//Return customized HTML
return $html;
}