不能在Chrome中访问另一个框架的内容
Can't access content of another frame in Chrome
我有两个框架。两个帧中的页面都来自同一个域(本地主机或活动域—两者都使用相同的协议)。
第一帧需要访问第二帧(xsample)的元素,当它完全加载和任何onload JS函数已经完成。但是第二帧需要一些时间来加载。
<frameset cols="*,*" rows="*" border="0" framespacing="0">
<frame src="picker.asp" name="xpicker" frameborder="no" marginwidth="15" marginheight="15">
<frame src="doc.asp" name="xsample" frameborder="no" marginwidth="15" marginheight="15">
</frameset>
下面的代码在IE和Firefox中工作,但在Chrome或Safari中不工作,在这些parent.xsample
总是false
function startWork(){
if(isSurveyLoaded()==false){
SL=setTimeout("startWork()",1000);
return;
}
else{
setTimeout("doMoreWork()",2000);
}
}
function isSurveyLoaded(){
if(!parent.xsample){
return false;
}
if(!parent.xsample.self.name){
return false;
}
if(parent.xsample.document.readyState!='complete'){
return false;
}
else{
return true;
}
}
使用parent.frames["xsample"]
访问帧。
对global
对象上命名元素的隐式引用没有标准化。
另一个注意,永远不要使用setTimeout("doMoreWork(), 1000)"
,因为这会迫使VM使用eval来执行代码。
使用setTimeout(doMoreWork, 1000)
,这是正确的方法。
我是这样解决的:
1. 给目标框架一个名称和一个id
2. 测试
3.测试目标帧内的变量(finishedLoading)是否被设置为true
(代码在测试finhedloading时使用===而不是==)
function isSurveyLoaded(){
if(!(parent.frames["xsample"] || parent.document.getElementById('xsample'))){
return false;
}
else{
if(parent.frames["xsample"]){
target=parent.frames["xsample"];
}
else{
target=parent.document.getElementById('xsample');
}
}
if ((target.finishedLoading==='undefined') || (target.finishedLoading===false) ){
return false;
}
else{
return true;
}
}
现在简化为
<frame src="doc.asp" onload="frameisloaded(this)" name="xsample" id="xsample" frameborder="no" marginwidth="15" marginheight="15">
在Chrome中,访问Window .frames[index]可以获得一个Window对象,从中你可以访问好的东西,比如在该框架的内容内的文档。
按文档访问。getElementById只返回iframe元素本身,几乎没有任何有用的属性来进一步挖掘DOM。
不能像其他浏览器那样通过Window .frames[name]访问Window对象,这个bug应该修复!
对于反对框架集的评论:批评那些使用框架的人并不能回答问题。其次,框架在某些方面比其他任何选择都做得更好。
所以问题不应该是,"有自尊心的web开发人员会使用框架集吗?"它应该是:"有哪个自尊的全功能浏览器不支持它们?"答案之一显然是Chrome。
他们在解释器中的各种函数周围撒上了"安全标志",包括那些在不同帧的页面之间促进某些信息传输的函数。因此,这样的操作在本地运行时不起作用:
top.frames [2] .document.getElementById (ID)
但是当在服务器上运行时,它通常会正常工作。
如果你需要它在Chrome本地工作,你需要使用某种解决方案。你必须要有创造力。在某些情况下,比如当您知道情境变量时,您可以创建一个数组来处理各种可能性(当它不需要那么复杂时,这是一个拖累)。
- 如何在另一个html文件的框架中包含图像
- 禁用来自另一个html页面的html框架的超链接
- 离子框架:Can't从我的控制器重定向到另一个页面
- 页面上有多个 iframe - 只有 IE 会正确更改另一个框架
- 从另一个 ExtJS 自定义框架扩展组件
- 从一个框架的页面调用一个javascript函数到另一个框架的页面,给出“权限被拒绝”错误
- 用javascript调用另一个框架ASP.NET C#函数
- AngularJS ng-click转到另一个页面(使用Ionic框架)
- 如何从另一个框架访问框架的文档对象?
- 带有框架的Html页面,从一个框架链接到另一个框架(带有交互式地图)
- 如何从另一个java脚本框架中调用angularJS
- 如何在HTML中将一个变量从一个框架传递到另一个框架
- 将一个框架放在另一个框架之上
- HTML将内容从一个框架移动到另一个框架
- 我在一个页面上有多个视频,当我在离子框架中播放另一个视频时,我需要暂停视频
- 对另一个框架生成的ajax请求使用.ajaxComplete()
- 如何复制SVG的内容并将其附加到另一个SVG框架中
- 将文本框从一个框架复制到另一个框架
- 在框架中加载另一个域名网站
- 不能在Chrome中访问另一个框架的内容