使用iframe构建的访问Dom

时间:2014-05-20 10:49:28

标签: javascript html google-chrome iframe google-chrome-extension

有经济日历的页。

场景:

  1. 我在浏览器中加载页面。例如:http://www.dukascopy.com/swiss/english/marketwatch/calendars/eccalendar/
  2. 仔细看看。如果有我感兴趣的数据,我点击按钮并保存所有带加载的iframe数据的html进行解析。
  3. 问题是此页面上的必要数据加载了iframe。我在这里读到chrome拒绝使用js-injects进行iframe访问。但我可以通过右键菜单轻松访问必要的表格“inspect element”。是否可以在没有js-injects的情况下访问它?就像自动“检查DOM元素”或内部HTML一样?

    我用pyside(python qt webkit接口)解决了这个问题:

    def print_content():
        res = web.page().mainFrame().childFrames()
        for i in res:
            s = i.documentElement().toOuterXml()
            print(s)
    

    但现在我想从铬(铬)扩展中做到这一点。现代铬(铬)有类似的功能吗? 例如:

    chrome.web.page().mainFrame().childFrames() etc...
    

    UPD:

    尝试过推荐。更正了清单并添加到内容脚本:

    chrome.runtime.sendMessage({greeting: "hello"}, function(response) {
        var res = document.querySelectorAll("iframe");
        var len = res.length;
        for (var i = 0; i < len; i++) {
           //alert(myStringArray[i]);
           console.log(res[i].contentDocument);
           //Do something
        }
        //console.log(res);
    

    获取此错误: (未知)事件处理程序出错:错误:阻止了一个原始“dukascopy.com”的框架;从访问跨源框架。在chrome-extension://bgoddjjeokncninlaacmjamgkohmcecb/content.js:19:23在extend :: messaging:323:11 at Function.target。(匿名函数)(extensions :: SafeBuiltins:19:14)在Event.dispatchToListener(扩展) :: event_bindings:386:22)在event.dispatch_(extensions :: event_bindings:371:27)的event.dispatch(extensions :: event_bindings:392:17)at dispatchOnDisconnect

1 个答案:

答案 0 :(得分:0)

您需要将内容脚本注入内部框架才能访问它。这是完全可能的,只是外部文档的脚本无法访问iframe内容。

This question介绍了如何在基于清单的注入的情况下执行此操作。

对于程序化注入,您可以在InjectDetails object all_frames: true中传递chrome.tabs.executeScript