2014-10-11 107 views
0

我正在研究一个简单的扩展,它基于浏览器中的某些用户操作将消息发送到一个弹出脚本,然后该脚本又调用后台脚本中的函数。我是新开发的Chrome扩展程序,请耐心等待。异常邮件检测

目前,我有一个设置,检测用户在内容脚本浏览器中的操作,发送消息到弹出脚本,并调用检测到的背景页面中的功能(或者我相信,我没有通过background.js获取警报或日志以显示任何地方)。

我的问题是:为什么在从后台脚本发送消息时没有检测到消息,并且是在我的后台脚本中被调用的函数呢?

的manifest.json

{ 
    ... 
    "browser_action": { 
    "default_icon": "gamify.png", 
    "default_popup": "user_stats.html" 
    }, 
    "content_scripts": [ 
    { 
     "matches": ["<all_urls>"], 
     "js": ["jquery.min.js", "contentscript.js"], 
     "run_at": "document_end" 
    } 
    ], 
    "background": { 
    "scripts": ["background.js"], 
    "persistent": false 
    }, 
    "permissions": [ 
    "storage" 
    ] 
} 

contentscript.js

$(document).ready(function() { 
    $("#page-container").click(function() { 
    chrome.runtime.sendMessage({ 
     action: "Load" 
    }); 
    }); 
}); 

//弹出脚本

$(document).ready(function() { 

    var bg = chrome.extension.getBackgroundPage(); 

    chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { 
    var action = request.action; 
    if (action == "Load") { 
     bg.initialize(); 
    } 
    }); 
}); 

background.js

function initialize() { 

    chrome.runtime.sendMessage({ 
    action: "Start" 
    }); 

    chrome.storage.sync.get("initialized", function(data) { 
    alert("BS: Get initialized: " data); 
    //Do stuff here 
    }); 
} 
+0

你能解释一下把这个“代理”代码放在弹出窗口背后的逻辑吗? – Xan 2014-10-11 22:22:44

+0

更进一步,我打算让弹出式js处理内容和后台脚本之间的消息/数据传递,同时使用该数据修改显示弹出框中的元素。 – Chris 2014-10-11 22:25:41

+0

坏主意。我会解释为什么。 – Xan 2014-10-11 22:33:30

回答

0

你为什么要以迂回的方式来做这件事?

弹出页面只在显示时才存在;如果弹出窗口未打开,则没有任何内容会听取您的消息,并且会丢失。由于它非常脆弱,它不适合用于消息路由。

所以,第1步:从弹出窗口中删除邮件路由。意识形态上,后台页面“始终存在”,并处理大部分操作。你可以通过听chrome.storage.onChanged来控制弹出窗口的显示,或者只是弹出不同的消息。


但是,您也已宣布背景页面有"persistent" : false,即它是一个Event page。这意味着它总是不存在总是

顺便说一下,如果页面被卸载,这将导致chrome.extension.getBackgroundPage不时失败。

你有两个选择:

  1. 删除"persistent": false。事件页面很难处理,所以如果你是新手,你可能想跳过它。

  2. 请仔细阅读活动页面文档。它列出了你必须处理的限制。

+0

感谢您花时间为新手解释一些事情,非常感谢。我一直在写,因为我一直在阅读,所以一个领域的进步导致了另一个领域的倒退。我会花更多时间处理你的建议。 – Chris 2014-10-11 23:29:54