2015-06-01 115 views
0

我建立一个简单的Chrome扩展: manifest.json的简单的Chrome扩展

{ 

    "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"] 
     } 
    ] 

} 

background.js

chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { 
    chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}, function(response) { 
     console.log(response.farewell); 
    }); 
}); 

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窗口中,但是当我单击它时,会创建一个空对话框,尽管我希望它会指出“你好”。有什么建议?

+0

你几乎肯定不希望js/script.js是一个弹出脚本*和*内容脚本。查看[概述](https://developer.chrome.com/extensions/overview)。 – Teepeemm

回答

0

如果您在清单中设置了"default_popup": "popup.html",请打开一个窗口以显示您的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); 
     }); 
    }); 
}); 
+0

这里似乎不是答案;当我仔细地阅读这个问题时,OP似乎希望“hello”出现在弹出窗口中。 – Xan

0

虽然我也希望它说“你好”空对话创建

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

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