Is that possible calling content script method by context menu item in Chrome extension?

前端 未结 1 1801
没有蜡笔的小新
没有蜡笔的小新 2020-12-31 19:22

I\'m trying to use context menu item to invoke my method written in content script.
Is that possible?

As i have tried, context menu could only doing stuff in bac

相关标签:
1条回答
  • 2020-12-31 20:08

    You can refer to following code as a reference, where upon click of a context menu a function in content script is invoked.

    Sample Demonstration

    manifest.json

    {
        "name": "Content to Context menu",
        "description": "http://stackoverflow.com/questions/14452777/is-that-possible-calling-content-script-method-by-context-menu-item-in-chrome-ex",
        "version": "1",
        "manifest_version": 2,
        "background": {
            "scripts": [
                "background.js"
            ]
        },
        "content_scripts": [
            {
                "matches": [
                    "<all_urls>"
                ],
                "js": [
                    "myscript.js"
                ]
            }
        ],
        "permissions": [
            "contextMenus"
        ]
    }
    

    background.js

    function genericOnClick(info, tab) {
        console.log("item " + info.menuItemId + " was clicked");
        console.log("info: " + JSON.stringify(info));
        console.log("tab: " + JSON.stringify(tab));
    
        //Add all you functional Logic here
        chrome.tabs.query({
            "active": true,
            "currentWindow": true
        }, function (tabs) {
            chrome.tabs.sendMessage(tabs[0].id, {
                "functiontoInvoke": "showInfo"
            });
        });
    }
    
    // Create one test item for each context type.
    var contexts = ["page", "selection", "link", "editable", "image", "video",
        "audio"];
    for (var i = 0; i < contexts.length; i++) {
        var context = contexts[i];
        var title = "Test '" + context + "' menu item";
        var id = chrome.contextMenus.create({
            "title": title,
            "contexts": [context],
            "onclick": genericOnClick
        });
        console.log("'" + context + "' item:" + id);
    }
    

    myscript.js

    var showInfo = function () {
        console.log("Show Info is invoked");
    }
    var showAnotherInfo = function () {
        console.log("Show Another Info");
    }
    chrome.extension.onMessage.addListener(function (message, sender, callback) {
        if (message.functiontoInvoke == "showInfo") {
            showInfo();
        }
        if (message.functiontoInvoke == "showAnotherInfo") {
            showAnotherInfo();
        }
    });
    

    References

    • Content Scripts
    • Context Menu
    • Extension API
    0 讨论(0)
提交回复
热议问题