【问题标题】:Chrome Extension: Access to frame elementsChrome 扩展:访问框架元素
【发布时间】:2013-02-02 19:35:58
【问题描述】:

我正在开发一个 chrome 扩展(内容脚本)来访问网页内容。我使用 DOM 访问页面中的所有元素。 当网页包含“框架集”时,我的代码无法正常工作。在这件事上,我可以计算帧数,但无法访问帧内容。 我使用此代码来计算当前页面上可用的框架对象:

对于框架集:

parent.frames.length

对于 iframe :

document.getElementsByTagName("iframe").length

但以下代码不起作用:

parent.frames[0]

并返回“未定义”。

我的问题: 如何访问 chrome 扩展中的框架集元素(对于 iframe 和框架集)?

【问题讨论】:

    标签: dom google-chrome-extension frame


    【解决方案1】:

    类似于Jerinaw 的处理方式,我通过 jQuery 进行了以下操作:

    // Find the frame
    var frame = $(document).find("frame[name='nameOfFrame']")[0];
    // Callback once frame's internals are loaded
    $(frame).load(function() {
      accessFrame();
    });
    
    function accessFrame() {
      // The following line is really important to accessing the frame's content.
      var frameContent = frame.contentDocument;
      // Notice that $(".objectSelectorClass") won't discover the object you're hunting for.  You have to find it within the frame's contentDocument.
      var objectInFrame = $(frameContent).find(".objectSelectorClass");
      var objectInFrame_AlternateSyntax = $(".objectSelectorClass", frameContent)
      // do stuff to objectInFrame
    }
    

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题。框架不是 iframe,它们位于框架集中。我必须做的是向框架加载(由于某种原因 addEventListener 不起作用),但通过它的 contentWindow

      例如: 来自主文档

      document.querySelector('#SomeFrameSelector').contentWindow.document.body.onload
      

      以这种方式访问​​框架让我进入框架文档并允许我附加 onload。一旦使用相同的选择器触发,我就可以修改框架内容。

      【讨论】:

      • 我基本上做了同样的事情,但是通过 jquery:$(document).find("frame[name='frameName']")[0].load
      猜你喜欢
      • 2012-07-08
      • 1970-01-01
      • 2014-02-14
      • 2017-05-04
      • 1970-01-01
      • 2013-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多