来自内容脚本的桌面通知

时间:2010-08-21 06:34:44

标签: google-chrome google-chrome-extension

我试图从内容脚本中显示一个简单的桌面通知代码,但它似乎不起作用..我已经在maifest.json文件中添加了权限。从内容脚本中显示它们是否有限制?

2 个答案:

答案 0 :(得分:9)

您无法直接通过内容脚本显示通知。 但是,您可以通过后台页面显示它们。

manifest.js应该是这样的:

{
 "name": "Notify This",
 "version": "0.1",
 "permissions": [
    "notifications"
 ],
 "background_page": "background.html",
 "content_scripts": [
   {
    "matches": ["http://www.example.com/*"],
    "js": ["contentscript.js"]
   }
 ]
}

然后使用chrome.extension.sendRequest()

// in your contentscript.js
chrome.extension.sendRequest({msg: "Sup?"}, function(response) { // optional callback - gets response
    console.log(response.returnMsg);
});

在接收端你应该有一个onRequest听众:

// in your background.html
    chrome.extension.onRequest.addListener(
  function(request, sender, sendResponse) {

        // Create a simple text notification:
    var notify = webkitNotifications.createNotification(
      '48.png',  // icon url - can be relative
      'Hello!',  // notification title
      request.msg  // notification body text
    );

    notify.show();

    setTimeout(function(){ notify.cancel(); },5000);
    sendResponse({returnMsg: "All good!"}); // optional response
  });

答案 1 :(得分:2)

是的,通知使用特定于Chrome的API,而内容脚本仅适用于一般的javascript等... background page是所有特定于Chrome的API都可以运行的地方......首先,您需要在manifest.json文件中注册您的背景页面 - 如下所示:

 "background_page": "background.html",

同样在清单文件中,允许所需的权限:

"permissions": [ "notifications" ],

然后,后台页面中的脚本应如下所示:

<script>
setTimeout("setNotification();",1); 
function setNotification(){
  var n
  if (window.webkitNotifications.checkPermission() != 0){
    setNotification();
    return false;
  }
n = window.webkitNotifications.createHTMLNotification('http://www.your-notification-address.com');
n.show();}
</script>