我有一个父页面,其中包含iframe
并且还有javascript
,它将创建一个表单,将其附加到iframe,并在页面加载时通过POST将其提交到外部URL。
然后,外部网址中的内容会加载到iframe中。这适用于所有浏览器,除了IE9。
我尝试了'meta http-equiv="X-UA-Compatible" content="IE=8" '
技巧,这没有用。有时iframe呈现内容,有时它不会刷新。 javascript中的调试语句显示每次都会触发(每个页面加载),Fiddler显示对外部URL的成功请求/响应。就像IE9有选择地决定是否更新DOM一样。
另外我注意到,如果外部请求有任何延迟(花费几秒钟),那么iframe内容永远不会呈现。有没有人用IE9体验过这个并有解决方案?
<iframe frameborder="0" height="600px" id="ifPage" runat="server" width="700px" />
<script type="text/javascript" language="javascript">
var alreadyrunflag = 0 //flag to indicate whether target function has already been run
if (document.addEventListener) {//FireFox or Sarafi
document.addEventListener("DOMContentLoaded", function () { alreadyrunflag = 1; GetExternalPageContent() }, false)
}
else if (document.all && !window.opera)
{//IE
addLoadEvent(GetExternalPageContent)
}
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
}
else {
window.onload = function () {
if (oldonload) {
oldonload();
}
func();
}
}
}
function GetExternalPageContent() {
var iframe = document.getElementsByTagName("iframe");
if (iframe != null) {
var uniqueString = "embFrame";
iframe[0].contentWindow.name = uniqueString;
var form = document.createElement("form");
form.target = uniqueString;
form.action = '<%=ExternalUrl %>';
form.method = "POST";
//parameter submitted to external URL to get appropriate content
var input = document.createElement("input");
input.type = "hidden";
input.name = "embParam";
input.value = "paramValue1";
form.appendChild(input);
document.body.appendChild(form);
form.submit();
}
}
</script>
答案 0 :(得分:1)
我只是想让人们知道这里的问题是IE不喜欢这样命名iframe内容窗口:
iframe[0].contentWindow.name = uniqueString
相反,name属性必须位于iframe标记内。没有javascript错误表明这一点,它只是没有一致地呈现。然后,当您需要动态引用iframe内容时,请使用:
var iframe = window.frames['embFrame']
这样做可以解决问题,现在可以一致地呈现iframe内容。