Javascript 简单铬延伸

Javascript 简单铬延伸,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我正在构建一个简单的chrome扩展: manifest.json { "name": "Hello World", "version": "1.0", "manifest_version": 2, "background": { "scripts": ["js/background.js"] }, "description": "My First Chrome Extension", "browser_action":

我正在构建一个简单的chrome扩展: manifest.json

{

    "name": "Hello World",
    "version": "1.0",
    "manifest_version": 2,
    "background": {
        "scripts": ["js/background.js"]
    },
    "description": "My First Chrome Extension",
    "browser_action": {

        "default_icon": "icon.png",
        "default_popup": "popup.html"

    },
    "permissions": ["tabs", "activeTab", "<all_urls>"],
    "content_scripts": [
        {
            "matches": ["http://*/*"],
            "js": ["js/script.js"]
        }
    ]

}
scripts.js

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
        console.log(sender.tab ?
        "from a content script:" + sender.tab.url :
            "from the extension");
        if (request.greeting == "hello") {
            sendResponse({farewell: "goodbye"});
            document.write(request.greeting);
        }
    });
popup.html

<script src="js/script.js"></script>

新按钮正确地出现在我的chrome窗口中,但当我单击它时,会创建一个空对话框,尽管我希望它会说“你好”。有什么建议吗?

如果您在清单中设置了“默认弹出窗口”:“popup.html”,chrome会打开一个窗口来显示您的html页面。因此,从清单(无需popup.html文件)中删除这一行,并在background.js中执行如下操作:

chrome.browserAction.onClicked.addListener(function() {
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
        chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}, function(response) {
            console.log(response.farewell);
        });
    });
});
创建了一个空对话,尽管我希望它说“你好”

您正在调用
document.write
来自内容脚本,而不是弹出代码-因此它正在写入实际的活动选项卡,而不是弹出窗口


要在弹出窗口中显示某些内容,您需要与弹出窗口代码中的
文档进行交互。

似乎不是答案;当我仔细阅读这个问题时,OP似乎希望“hello”出现在弹出窗口中。您几乎肯定不希望js/script.js成为弹出脚本和内容脚本。回顾历史。
chrome.browserAction.onClicked.addListener(function() {
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
        chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}, function(response) {
            console.log(response.farewell);
        });
    });
});