私は次のようなiframeを使用しました:
<iframe style='width: 330px; height: 278px' scrolling='no' name="iframeId" class="advPlayer" id="iframeId" frameborder="0" src='../../player/iabpreview.php?adid=<?php echo $selectedAdIdx ?>&autoPlay=true'></iframe>
<div>
をクリックするたびに、iframeのソースを変更する必要があります。次のコードを使用しています。
if ($j.browser.msie) {
frames['iframeId'].window.location="../player/iabpreview.php?adid="+adId+"&autoPlay=true";
}else {
$j(".advPlayer").eq(0).attr("src", "../player/iabpreview.php?adid="+adId+"&autoPlay=true");
}
これはFirefoxでは機能しますが、Internet Explorerでは機能しません。
Internet Explorerでもどのコードが機能しますか?
あなたは決して「ブラウザ検出」ではなく、機能検出を使用すべきではありません。 imhoの最も安全な方法は次のとおりです。
function SetIFrameSource(cid, url){
var myframe = document.getElementById(cid);
if(myframe !== null){
if(myframe.src){
myframe.src = url; }
else if(myframe.contentWindow !== null && myframe.contentWindow.location !== null){
myframe.contentWindow.location = url; }
else{
myframe.setAttribute('src', url);
}
}
}
Srcプロパティが使用可能かどうかをテストしてください。そうでない場合は、コンテンツウィンドウでテストし、最後の試行はsetAttributeです。
document.getElementById("iframeId").src = "Your URL here."
私はgetElementById
と他の多くの亜種を試しました。 IE、FF、Opera、Chromeで同じように機能するものはありません。
これはうまくいきます:parent.frames.IFRAME_ID.location.href = '/';
<script type="text/javascript">
function changesrc(iframid, pagesrc)
{
document.getElementById(iframid).src = pagesrc;
}
</script>
<table style="width: 100%">
<tr>
<td>
<a href="#" onclick="changesrc('iframe1','page1.php')">Page1</a> <br/>
<a href="#" onclick="changesrc('iframe1','page2.php')">Page2</a> <br/>
<a href="#" onclick="changesrc('iframe1','page3.php')">Page3</a>
</td>
<td>
<iframe id="iframe1" src="page1.php" scrolling="no"
height="100%" width="100%" style="border:0px;"></iframe>
</td>
</tr>
</table>
document.getElementById('MsgBoxWindow').getAttribute('src')
はInternet Explorer、Firefox、Safariで動作し、ソースURLを取得します。
document.getElementById('MsgBoxWindow').setAttribute('src', urlwithinthedomain)
は、同じブラウザで動作してソースURLを設定します。
ただし、呼び出す前にiframeを読み込む必要があります。 JavaScriptコードを呼び出すときは、iframeの前に配置しないでください。ページの読み込み直後に呼び出す場合は、iframeの後に両方を配置でき、期待どおりに動作します。
次の2つの方法を使用して、iframeのソースを変更できます。
どちらの方法でも、変更を試みる前にiFrameが完全に読み込まれている必要があります。
Hrefの変更は、IE5を含むすべてのブラウザーで機能します。フレームをアドレス指定できます
要素のコンテンツウィンドウを参照することにより:
var myFrame = document.getElementById( 'myFrame'); myFrames.contentWindow.location = ' http://example.com ';
要素の名前を参照することにより:
var myFrame = window.frames.myFrame; // myFrameは要素の名前ですmyFrame.location = ' http://example.com ';
要素を選択してsrcを変更することにより、srcを変更することは上記のとおりですが、子孫要素ではなく子である必要があります。
var myFrame = document.getElementById('myFrame');
myFrame.src = 'http://example.com'
私はどこかからこれを手に入れます:
function getElementById(strId) {
var element;
if (document.getElementById) {
element = document.getElementById(strId);
}
else if (document.all) {
element = document.all[strId];
} else if (document.layers) {
element = document.layers[strId];
} else {
element = eval("document." + strId);
}
return element;
}
フレームコレクションは、ウィンドウオブジェクト(または同等のもの)を返します。ドキュメントオブジェクトをターゲットにしたい。やってみてください:
window.frames ['iframeId']。document.location.href = ....
これはIE、FF、Safariなどで機能するため、厄介なブラウザーを検出する必要もありません。
nb。 IIRCフレームコレクションはIEでnameを参照し、他のブラウザーではidを参照しているため、-にname属性とid属性の両方が必要ですが、すでに持っているので心配ありません!
window.frames['iframeId'].document.location.href =...
メモリリークもあります。この効果は、IEブラウザーではさらに否定されます。
var myFrame = document.getElementById('myFrame');
myFrame.src = 'http://example.com';
メモリリークがあります。 iframe srcが何度も変更された後、ブラウザの速度が低下してクロールが発生します。
次のコードを使用してください。
var iframe = document.getElementById('IFRAME ID'); // just for clarity
iframe .src = 'URL here';
すべてのブラウザで動作するはずです。
URLの#anchorのみを変更する場合(つまり、page.php#thisからpage.php#thatに変更する場合)、IEはページを更新しませんが、ChromeおよびFirefoxはこれを行います。これが問題である場合、クエリ文字列にランダムなものを追加して、IEを作成します。
例(jQueryを使用):
var hash = 'yourHash';
var Rand = 1 + Math.floor(Math.random() * 9999);
var helpUrl = 'page.php?rand=' + Rand + '#' + hash;
$('#iframe').attr('src', helpUrl);