Firefox插件开发,打开一个隐藏的网络浏览器

Firefox addon development, open a hidden web browser

本文关键字:一个 隐藏 浏览器 网络 开发 插件 Firefox      更新时间:2023-09-26

我正在开发一个Firefox插件,如何打开一个对用户隐藏的web浏览器,但我可以在插件代码中用Javascript编写脚本?

SDK用户应该使用page-worker模块。

XUL加载项可以在某个地方插入XUL <iframe type="content">并使其隐藏(例如.style.display = "none";)。此外,您可能希望禁用<iframe>中的图像/插件/脚本。

假设window是XUL窗口,例如browser.xul,下面是一个从隐藏的<iframe>:读取网站标题的示例

function readTitleFromPage(uri, callback) {
    callback = callback || function() {};
    let frame = document.createElement("iframe");
    frame.setAttribute("type", "content");
    frame.style.display = "none";
    document.documentElement.appendChild(frame);
    let docShell = frame.contentWindow.
                   QueryInterface(Ci.nsIInterfaceRequestor).
                   getInterface(Ci.nsIWebNavigation).
                   QueryInterface(Ci.nsIDocShell);
    docShell.allowImages = false;
    docShell.allowPlugins = false;
    frame.setAttribute("src", uri);
    let load = function load(e) {
        try {
            if (e.type == "load") {
                callback(frame.contentDocument.title);
            }
            else {
                callback(null);
            }
        }
        finally {
            // Always remove event listeners and the frame itself, at some point.
            // In this example, we don't need the frame anymore, beyond this point,
            // so remove it now.
            frame.removeEventListener("load", load, false);
            frame.removeEventListener("error", load, false);
            frame.removeEventListener("abort", load, false);
            frame.parentElement.removeChild(frame);
        }
    };
    frame.addEventListener("load", load, false);
    frame.addEventListener("error", load, false);
    frame.addEventListener("abort", load, false);
}

当然,你可以在框架周围保留多久,重复使用多少次,等等。但确保在不再需要它时将其移除,以节省资源(内存、CPU)。在不需要时将其重置为about:blank可能也是一个不错的选择。

相关文章: