Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取选项卡的内容并将其写入文件_Javascript_Firefox Addon_Firefox Addon Sdk - Fatal编程技术网

Javascript 获取选项卡的内容并将其写入文件

Javascript 获取选项卡的内容并将其写入文件,javascript,firefox-addon,firefox-addon-sdk,Javascript,Firefox Addon,Firefox Addon Sdk,我正在尝试提取已验证站点的内容 我尝试使用最新的Firefox插件SDK进行扩展 直到现在我才学会如何打开标签 var Widget = require("widget").Widget; var tabs = require('tabs'); exports.main = function() { new Widget({ label: "My Mozilla Widget", contentURL: "http://www.mozilla.org/fa

我正在尝试提取已验证站点的内容

我尝试使用最新的Firefox插件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")
            }
        });
};

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

加载完成后,您必须附加一个内容脚本来获取页面的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

为什么需要先在选项卡中打开它?你不能在不将页面加载到选项卡中的情况下直接加载页面吗?@MattiasBuelens我有一个页面,可以在几秒钟后加载内容。当我尝试使用request时,它会在0s处显示页面。显示内容加载。我想用数据获取页面,这些数据在一段时间后出现。有没有一种方法可以使用请求来实现这一点?谢天谢地,请求不会执行脚本,因此加载页面内容的内容不会出现在请求的响应中。