Jquery 使用javascript更改ie中的iframe源代码
我使用的iframe如下所示:Jquery 使用javascript更改ie中的iframe源代码,jquery,iframe,Jquery,Iframe,我使用的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'></ifra
<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>
这适用于Firefox,但不适用于Internet Explorer
什么代码也适用于Internet Explorer?frames集合返回窗口对象(或等效对象)。您希望以文档对象为目标;试着做:
document.getElementById("iframeId").src = "Your URL here."
window.frames['iframeId'].document.location.href=..
这适用于IE、FF、Safari等,因此也不需要混乱的浏览器检测
注意。IIRC框架集合在IE中引用了name,在其他浏览器中引用了id,因此您需要在上同时使用name和id属性-但您已经有了,所以不用担心 只需使用以下代码即可
var iframe = document.getElementById('IFRAME ID'); // just for clarity
iframe .src = 'URL here';
它应该适用于所有浏览器。
document.getElementById('MsgBoxWindow')。getAttribute('src')
适用于Internet Explorer、Firefox、Safari以获取源URL
document.getElementById('MsgBoxWindow').setAttribute('src',urlWithInDomain)
在相同的浏览器上工作以设置源URL
但是,在调用之前必须加载iframe。调用JavaScript代码时,不要将其放在iframe之前。如果在页面加载之后立即调用iframe,则可以将两者都放在iframe之后,它将按预期工作。我尝试了
getElementById
和许多其他变体。没有一个在IE、FF、Opera或Chrome上工作相同
这一个很好用:
parent.frames.IFRAME_ID.location.href='/'代码>因为您已经使用了jquery标记,所以这可能很方便
function resizeIframe(height) {
height = parseInt(height);
height += 100;
$('iframe#youriframeID').attr('height', height);
}
如果您正在进行跨浏览器调整大小,请看这篇文章,它解释了如何根据iframes内容自动调整高度。您需要访问iframed网站的html。
您可以使用两种方法更改iframe的src:
更改href
更改src
这两种方法都要求在尝试修改之前完全加载iFrame
更改href适用于所有浏览器,包括IE5。
您可以在框架中寻址
- 通过参考元素的contentwindow:
var myFrame=document.getElementById('myFrame');
myFrames.contentWindow.location=''
- 通过引用元素的名称:
var myFrame=window.frames.myFrame;//其中myFrame是元素的名称
myFrame.location=''
如上所述,通过选择元素并更改src来更改src-但它必须是子元素,而不是子元素
var myFrame = document.getElementById('myFrame');
myFrame.src = 'http://example.com'
您不应该使用“浏览器检测”,而应该使用功能检测。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。我从其他地方得到了这个:
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;
}
它有内存泄漏。在iframe src多次更改后,浏览器将变慢为爬行
window.frames['iframeId'].document.location.href =...
也有内存泄漏。IE浏览器更倾向于放弃这种效果。
<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>
函数changesrc(iframid,pagesrc)
{
document.getElementById(iframid).src=pagesrc;
}
请注意,如果您只是更改URL的锚定(即从page.php改为page.php),IE不会刷新页面,但Chrome和Firefox会。如果这是您的问题,那么您可能希望在查询字符串中添加一些随机内容,使IE认为这是一个全新的页面,并强制重新加载
例如(使用jQuery):
对我来说,它在Safari不起作用。相反,它会更改页面本身的URL。事实上,这里发布的所有解决方案似乎都做到了这一点。这是一个很大的谜。你自己看看:我已经在IE 6-9中验证了这一点,Chrome、Safari、Firefox和Opera.getElementById在iframe中根本不起作用。我必须通过“窗口”来引用它……这绝对是一条路。将由所有浏览器支持。这是更好的解决方案。我创建了一个jQuery函数,这样您就可以向它传递选择器(id、类或元素):函数setIFrameSource(选择器、url){var myframe=$(选择器)[0];if(myframe!==null){if(myframe.src){myframe.src=url;}else if(myframe.contentWindow!==null&&myframe.contentWindow.location!==null){myframe.contentWindow.location=url;}其他{myframe.setAttribute('src',url);}}}用法:setIFrameSource('.fancybox iframe','/somepage.htm');
此内存泄漏是否特定于特定浏览器?
window.frames['iframeId'].document.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>
var hash = 'yourHash';
var rand = 1 + Math.floor(Math.random() * 9999);
var helpUrl = 'page.php?rand=' + rand + '#' + hash;
$('#iframe').attr('src', helpUrl);