Javascript 加载整个页面后执行firefox扩展

Javascript 加载整个页面后执行firefox扩展,javascript,firefox-addon,firefox-addon-sdk,firefox-addon-webextensions,xpi,Javascript,Firefox Addon,Firefox Addon Sdk,Firefox Addon Webextensions,Xpi,我正在使用。它的问题是,在加载页面之前加载扩展时,它有时不起作用 例如:如果您将https://www.pluralsight.com/courses/protocol-deep-dive-icmp,然后转到https://www.pluralsight.com/search?q=Protocol%20Deep%20Dive,它不会突出显示书签 在扩展页面中,它显示 您的示例站点上的某些链接似乎是在之后添加的 扩展有机会执行 我已将manifest.json修改为: { "ma

我正在使用。它的问题是,在加载页面之前加载扩展时,它有时不起作用

例如:如果您将
https://www.pluralsight.com/courses/protocol-deep-dive-icmp
,然后转到
https://www.pluralsight.com/search?q=Protocol%20Deep%20Dive
,它不会突出显示书签

在扩展页面中,它显示

您的示例站点上的某些链接似乎是在之后添加的 扩展有机会执行

我已将
manifest.json
修改为:

{
    "manifest_version": 2,
    "name": "Bookmark Highlighter",
    "version": "2.1",
    "description": "Highlights links to any URLs that are bookmarked",
    "icons": {
        "48": "icons/highlighter-48.png",
        "96": "icons/highlighter-96.png"
    },
    "content_scripts": [
        {
            "matches": [
                "<all_urls>"
            ],
            "js": [
                "contentScript.js"
            ],
            "run_at": "document_idle"
        }
    ],
    "background": {
        "scripts": [
            "backgroundScript.js"
        ]
    },
    "permissions": [
        "bookmarks",
        "storage"
    ],
    "options_ui": {
        "page": "options.html"
    },
    "applications": {
        "gecko": {
            "id": "jid0-CNA8w9TYZz7H2Wrq5ZfmSO5yB0I@jetpack"
        }
    }
}
backgroundScript.js
是:

// Default settings

var linkBackground = "rgba(0, 153, 255, 0.2)";
var imgBorder = "1px dashed blue";
var cssForText = "";
var cssForImage = "";

// Load settings from config

function onError(error) {
    console.log(`Error: ${error}`);
}

function onGot(item) {
    if (item.backgroundColor) {
        linkBackground = "rgba(" + item.backgroundColor.join(",") + ")";
        //console.log("Background color: " + linkBackground);
    }

    if (item.cssForText) {
        cssForText = item.cssForText;
        //console.log("Custom CSS for text: " + cssForText);
    }

    if (item.cssForImage) {
        cssForImage = item.cssForImage;
        //console.log("Custom CSS for image: " + cssForImage);
    }
}

var getting = browser.storage.local.get(["backgroundColor", "cssForText", "cssForImage"]);
getting.then(onGot, onError);

// Set up communication port

var port = browser.runtime.connect({name:"bookmark-highlighter"});

// Listen for response from background script

port.onMessage.addListener(function(m) {
    // Highlight bookmarked links

    if (m.bookmarks) {
        for (var i = 0; i < document.links.length; i++) {
            var link = document.links[i];

            if (!m.bookmarks[link.href]) {
                continue;
            }

            if (linkBackground != null && linkBackground.trim().length > 0) {
                link.style.background = linkBackground;
            }

            link.className += " bmh-bookmarked-link";

            // Add custom CSS if defined

            if (cssForText) {
                link.style.cssText += ';' + cssForText;
            }

            var child = link.firstChild;

            if (child && child.tagName == "IMG") {
                if (imgBorder != null && imgBorder.trim().length > 0) {
                    child.style.border = imgBorder;
                }

                child.className += " bmh-bookmarked-image";

                // Add custom CSS if defined

                if (cssForImage) {
                    child.style.cssText += ';' + cssForImage;
                }
            }
        }
    }
});

// Collect list of links

var hrefs = [];

for (var i = 0; i < document.links.length; i++) {
    var item = document.links[i];
    hrefs.push(item.href);
}

// Ask background script to check for bookmarks

port.postMessage({hrefs: hrefs});
var port;

function connected(p) {
    port = p;

    port.onMessage.addListener(function(m) {
        var searches = [];

        if (m.hrefs) {
            // Content script is asking if links have been bookmarked
            // Kick off a bunch of searches

            for (var i = 0; i < m.hrefs.length; i++) {
                var href = m.hrefs[i];
                searches.push(browser.bookmarks.search({url: href}));
            }
        }

        // Wait for all searches to finish before continuing

        Promise.all(searches).then(function (results) {
            var bookmarks = {};
            var foundBookmarks = false;

            // Collect results into a single object

            for (var i = 0; i < results.length; i++) {
                var result = results[i];

                if (result.length > 0) {
                    bookmarks[result[0].url] = true;
                    foundBookmarks = true;
                }
            }

            // Pass the good news back to content script

            if (foundBookmarks) {
                var msg = { bookmarks: bookmarks };
                port.postMessage(msg);
            }
        });
    });
}

browser.runtime.onConnect.addListener(connected);
var端口;
功能连接(p){
端口=p;
port.onMessage.addListener(函数(m){
var搜索=[];
if(m.hrefs){
//内容脚本询问链接是否已添加书签
//启动一系列搜索
对于(var i=0;i0){
书签[结果[0].url]=true;
foundBookmarks=true;
}
}
//将好消息传回内容脚本
如果(创建书签){
var msg={bookmarks:bookmarks};
港口邮递信息(msg);
}
});
});
}
browser.runtime.onConnect.addListener(已连接);