Chrome扩展程序 - 立即卸载活动页面

时间:2012-11-24 10:19:24

标签: google-chrome-extension

我是Chrome扩展程序开发的新手。我写了一个扩展程序,每次创建新选项卡时都会显示通知。它可以工作,但是如果我打开一个标签并立即打开另一个标签,通知将仅显示在第一个标签上。

Chrome extension documentation我读到了这个:

  

一旦事件页面空闲了很短的时间(几秒钟),就会调度chrome.runtime.onSuspend事件。

显然它解释了为什么第二个标签没有通知。是否可以立即卸载事件页面(即一旦显示通知),而无需等待几秒钟?

这是我的代码:

的manifest.json

{
    "name": "test",
    "version": "1.0",
    "description": "notification test",
    "manifest_version": 2,
    "permissions": [ "tabs", "notifications" ],
    "background": { "scripts": ["background.js"], "persistent": false }
}

background.js

var notification = webkitNotifications.createNotification(
    '48.png',
    'hello',
    'this is a test'
);

chrome.tabs.onCreated.addListener(function(tab) {
    notification.show();
});

1 个答案:

答案 0 :(得分:0)

代码a)

的manifest.json

{
    "name": "test",
    "version": "1.0",
    "description": "notification test",
    "manifest_version": 2,
    "permissions": [ "tabs", "notifications" ],
    "background": { "scripts": ["background.js"], "persistent": false },
    "web_accessible_resources": [
    "48.png"
  ]
}

background.js

function notify(tab){
    console.log(tab);
    var notification = webkitNotifications.createNotification(
        '48.png',
        'hello',
        'this is a test'
    );
    notification.show();
}

chrome.tabs.onCreated.addListener(notify);

在此解决方案中,如果由于https://code.google.com/p/chromium/issues/detail?id=162543第一次/紧接在另一个标签之后创建新标签,您将看到两个通知。但是在这里你被事件页面而不是背景页面所震撼。

代码b)

通过将活动页面设置为背景页面,您可以获得所需的功能;但是,如果您特别关注它,则不使用事件页面。

的manifest.json

{
    "name": "test",
    "version": "1.0",
    "description": "notification test",
    "manifest_version": 2,
    "permissions": [ "tabs", "notifications" ],
    "background": { "scripts": ["background.js"], "persistent": true },
    "web_accessible_resources": [
    "48.png"
  ]
}

background.js

function notify(tab){
    console.log(tab);
    var notification = webkitNotifications.createNotification(
        '48.png',
        'hello',
        'this is a test'
    );
    notification.show();
}

chrome.tabs.onCreated.addListener(notify);