无法访问Chrome中其他框架的内容

| 我有两个框架。两个框架中的页面都来自相同的域(本地主机或实时域-都使用相同的协议)。 当第一帧已完全加载且所有onload JS函数均已完成时,需要访问第二帧(xsample)的元素。但是第二帧需要一段时间才能加载。
<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中不可用,在那些“ 1”中始终为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\"]
取景。 对“ 4”对象上的命名元素的隐式引用未标准化。 另外,请不要执行“ 5”,因为这会迫使VM使用eval执行代码。 使用
setTimeout(doMoreWork, 1000)
是正确的方法。     
我通过以下方法解决了它: 1.给目标框架一个名称和一个ID 2.对两者进行测试 3.测试目标框架内的变量(finishedLoading)是否设置为true (测试完成时,代码更改为使用===而不是==)
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对象,您可以从中访问该框架内容中的好东西,例如文档。 通过document.getElementById对其进行访问仅返回iframe元素本身,几乎没有有用的属性可用于进一步深入DOM。 这个错误是无法通过使用window.frames [name]来访问其名称的Window对象,这应该解决其他浏览器的问题!     
解决反框架问题的评论:批评使用框架的人无法回答问题。其次,在某些方面,框架比其他任何方法都要好。 因此,问题不应该是“什么自尊的Web开发人员使用框架集?”应该是:“什么自尊的全功能浏览器不正确地支持它们?”,答案之一是显然是Chrome。 他们在解释器中的各种功能周围撒上了“安全标志”,包括那些有助于在不同框架中的页面之间传输某些信息的功能。因此,在本地运行时,这样的事情不起作用: top.frames [2] .document.getElementById(ID) 但是,在服务器上运行时,通常可以正常工作。 如果您需要它在Chrome中本地运行,则需要使用某种解决方法。您必须要有创造力。在某些情况下,例如当您知道情境变量时,您可以创建一个数组来处理各种可能性(如果不需要那么复杂的话,这是一种拖累)。     

要回复问题请先登录注册