【问题标题】:Access within iframes在 iframe 内访问
【发布时间】:2011-04-24 13:13:17
【问题描述】:

我正在使用链接化派生代码的简短 sn-p 从 Firefox 扩展访问网页中的所有文本 inode。这看起来像这样,所以没什么特别有趣的:

var notInTags=[
    'a', 'head', 'noscript', 'option', 'script', 'style', 'title', 'textarea'
    ];

    var xpath = ".//text()[not(ancestor::"+notInTags.join(') and not(ancestor::')+")]";

    var candidates = window.content.document.evaluate(xpath, window.content.document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);

有没有人建议最好的方法来从任何存在的 iframe 中获取文本节点? 具体来说,是使用

iframe.window.content.document

可能会带我到任何地方(似乎没有),还是我在找错树?

干杯:)

编辑 2:这是完整的更新功能(再次)

    rsfindmod.searchiframes= function(candidates){
//This fixes cases where a redirecting page uses frames (Primarily search engines etc)
    const urlRegex = /\b(https?:\/\/[^\s+\"\<\>]+)/ig;
    var framesets = window.content.document.getElementsByTagName('frame','iframe','frameset');

    for (var i = 0; i < framesets.length; i++) {
    if (urlRegex.test(framesets[i])) {
    alert('test');
    var document2 = framesets[i].contentDocument;
    var notInTags=[
    'a', 'head', 'noscript', 'option', 'script', 'style', 'title', 'textarea'
    ];

    var xpath = ".//text()[not(ancestor::"+notInTags.join(') and not(ancestor::')+")]";

    var textnodes = document2.evaluate(xpath, document2, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
    for(var i = 0; i < textnodes.length; i++) {
        candidates.push(textnodes[i]);
    }
}   
}
}

编辑 3:更好的功能?

rsfindmod.searchiframes= function(candidates, frame, documentList){
//This fixes cases where a redirecting page uses frames (Primarily search engines etc)
    const framesets = frame.frames;

    for (var i = 0; i < framesets.length; i++) {
    var document2 = framesets[i].contentWindow.document;
    var notInTags=[
    'a', 'head', 'noscript', 'option', 'script', 'style', 'title', 'textarea'
    ];
    alert('test');
    var xpath = ".//text()[not(ancestor::"+notInTags.join(') and not(ancestor::')+")]";

    var textnodes = document2.evaluate(xpath, document2, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
    for(var i = 0; i < textnodes.length; i++) {
        candidates.push(textnodes[i]);
        alert('test1'); 
    }

}
}

【问题讨论】:

    标签: javascript firefox linkify


    【解决方案1】:

    你想要iframe.contentDocument(或iframe.contentWindow.document,但前者更简单)。

    【讨论】:

    • 一点也不喜欢。完整功能请看第一篇文章。
    • 甚至没有达到测试警报。理论上,这应该是找到页面上所有的 iframes/framesets,将它们添加到数组'framesets',然后将所有文本节点推送到候选数组。
    • 在我尝试访问 contentDocument 之前再次更新了我的内容以添加 URL 测试。这仍然不起作用,但它也不会让 Firefox 完全摇摆不定!
    • 您的子帧是否来自不同的来源(例如广告服务器)?如果是,那么您当然无法了解其中的内容。
    • 啊,这就是为什么 :( 我正在尝试修复通过文件搜索引擎重定向的页面。原始页面显示在搜索引擎服务器上页面的 iframe 中。任何解决这个问题的简单方法?我想我可以用抓取器做一些事情,然后以某种方式将其作为普通文档处理?
    猜你喜欢
    • 2016-05-03
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    相关资源
    最近更新 更多