未调用chrome扩展消息侦听器

时间:2015-03-05 21:11:02

标签: javascript google-chrome-extension

首先,我对Chrome扩展程序非常新,所以如果我想念一些愚蠢的东西,请指出我。我有一个内容脚本,里面有一个消息监听器,一个html页面,其中包含发送实际消息的脚本。我得到了标签ID,网址,但无法让听众解雇(或者我相信)。调整后它已经随机工作了5次,但没有任何一致性。

我的popup.html页面

<html>
<head>
    <title></title>

    <script type="text/javascript" src="js/jquery.min.js"></script>
    <script type="text/javascript" src="js/ServerCommunicator.js"></script>
    <script type="text/javascript" src="js/util.js"></script>
    <!--<script type="text/javascript" src="js/loginPageController.js"></script>-->
    <script type="text/javascript" src="js/managementPageController.js"></script>
    <link rel="stylesheet" type="text/css" href="extension.css" />
</head>
<body id="managementPage">

<div id="content">
    <label id="manageLabel"></label>
    <button id="manage" type="button">Manage</button>
    <button id="request" type="button">Request</button>
    <input id="code" type="text" placeholder="request code"/>

</div>

</body>
</html>

我的内容脚本

chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
    if (request.action == "test")
        sendResponse({test: "good test"});
});

我的脚本在popup(managementPageController.js)中加载

document.getElementById("manage").onclick = function()
{

    chrome.tabs.getSelected(null, function(tab)
    {
        alert("about to send request. id: " + tab.id);
        // Send a request to the content script.
        chrome.tabs.sendMessage(tab.id, {action: "test"}, function(response)
        {
         alert("tab url: " + tab.url);
         alert("sent request: " + response.test);
        });
    });


}

和我的清单文件

{
"manifest_version": 2,

"name": "Getting started example",
"description": "This extension shows a Google Image search result for the current page",
"version": "1.0",

"browser_action": {
    "default_icon": "logo.png",
    "default_popup": "index.html",
    "default_title": "Inserteck Chrome Extension8"
},
"permissions": [
    "tabs",
    "activeTab",
    "https://ajax.googleapis.com/",
    "http://199.168.255.214:8080/*"
],

"content_scripts": [
    {
    "matches": ["<all_urls>"],
    "js": ["js/background.js"],
    "runs_at": "document_start"
    }
],
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"}

我得到一个未定义的值,我假设是因为监听器未能被调用。如果任何人对修复或问题的原因有任何意见,或者如果我只是误解了消息的使用,我将非常感激。

2 个答案:

答案 0 :(得分:0)

当事件侦听器返回时,

sendResponse(函数)变为无效,除非您从事件侦听器返回true以指示您希望异步发送响应(这将使消息通道保持打开到另一端,直到{ {1}}被称为)。请参阅参考:chrome.runtime.onMessage.addListener

因此,您必须在sendResponse之后添加return true;,以表示您将异步调用响应函数。像这样:

sendResponse({test: "good test"});

答案 1 :(得分:0)

令人尴尬的是,自从我测试以来,我查看了一个不同的原因,并且没有找到任何理由为什么会出现问题。必须为扩展重新加载或新加载页面才能将内容脚本注入选项卡的网页。你提供的答案只是我答案的一半,但我相信当我重建和发布扩展时,另一半没有新载的网页。这看起来很简单,所以我希望有人看到这个,以避免我遇到的简单问题。