1

我正在尝试提取经过身份验证的站点的内容。

我通过使用最新的 Firefox Add-on SDK 来做一个扩展来做到这一点。

直到现在我学会了如何打开一个标签。

var Widget = require("widget").Widget;
var tabs = require('tabs');
exports.main = function() {
    new Widget({
        label: "My Mozilla Widget",
        contentURL: "http://www.mozilla.org/favicon.ico",

        onClick: function(event) {
           tabs.open("google.com")
            }
        });
};

我想获取刚刚打开的选项卡的内容并将其保存到本地文件。谢谢。

4

1 回答 1

0

当页面完成加载时,您必须附加一个内容脚本来获取页面的 DOM HTML。

我不确定您何时认为页面已完全加载,因为“内容加载”听起来像是 AJAX 请求加载页面的一部分。我假设以某种方式,您可以pageLoaded在页面加载时触发页面上下文中的函数。您可以通过多种方式触发该功能:侦听 DOM 更改、监控 AJAX 请求、...

无论哪种方式,您都可以将内容脚本附加到页面:

const { data } = require('sdk/self');
// snip
let tab = tabs.open('google.com');
tab.on('ready', function(tab) {
    let worker = tab.attach({
        contentScriptFile: data.url('post-page-content.js')
    });
    worker.port.on('page-content', function(content) {
        console.log(content);
        // Save to a file using sdk/io/file or something
    });
});

post-page-content.js当页面完全加载时,您的内容脚本应该向您的附加脚本发送一条包含页面内容的消息:

function pageLoaded() {
    self.port.emit('page-content', document.documentElement.outerHTML);
}
// TODO Attach pageLoaded as an event listener to something
于 2013-05-29T15:53:50.843 回答