【问题标题】:Frames object loop in javascript is undefinedjavascript中的Frames对象循环未定义
【发布时间】:2026-02-07 17:30:01
【问题描述】:

我用 crossrider.com 编写了一个浏览器扩展,需要使用 javascript 代码循环浏览页面上的框架,

HTML 代码。 (Main.html)

<frameset rows="85,*, 35">
    <frame name="header" src="1.html"    scrolling="no"   frameborder="no" >
    <frame name="body"   src="2.html"    scrolling="auto" frameborder="no">
    <frame name="footer" src="3.html"    scrolling="no"   frameborder="no" >
</frameset>

如果我在此页面 (Main.html) 上编写代码为

alert(self.frames.length);

它给了我 3,如果我这样做了

  for(var k = 0; k < self.frames.length ; k++)
    { 
      var obj = self.frames[k];
      // this obj is always object. 
      //and I could do further operation on this as obj.document ,
    }

但是,如果您编写 crossrider 扩展并执行相同的操作

appAPI.ready(function($){

var framesLength = self.frames.length; //it also gives 3
//but if I do below

for(var k = 0; k < self.frames.length ; k++)
    { 
      var obj = self.frames[k];
      // **this obj is always undefined.**
    }

});

感谢任何帮助或解决问题的方向。

【问题讨论】:

  • 您能提供一个您尝试在其中执行扩展的网址吗? (带有框架集的网址,如您的示例代码)
  • 扩展安装在本地浏览器上,我正在测试本地应用程序,因此我没有这个的 URL,但是如果你去 crossrider 并复制警报 self.frames.length 并循环遍历每个帧带有 appAPI.ready 功能的警报。在您的浏览器上安装此扩展程序后(我正在 IE 9 上进行测试),您将看到带有框架的 main.html 页面为所有框架提供未定义的内容。

标签: javascript jquery frames browser-extension crossrider


【解决方案1】:

我确实向 crossrider 团队提出了问题。 Crossrider-Support-frames-?

我从 CrossRider 的一位员工 (Shmueli Ahdut) 那里得到的快速回答是,CrossRider API 不支持框架,但令人惊讶的是

self.frames.length 发出适当的警报。

我将研究他们对 IE 的 onRequest API 的支持。这样就可以轻松监控帧/ajax 请求的 http。

【讨论】: