如果Chrome扩展程序在Opera上运行,Chrome扩展程序如何在运行时检查?

时间:2015-09-26 10:58:21

标签: javascript google-chrome-extension opera-extension

由于Opera支持Chrome扩展程序API,因此几乎可以在此浏览器上运行功能齐全的Chrome扩展程序。但是,API中仍然存在一些缺失的功能。

是否有一种简单有效的方法可以检查目前是否在Opera或Google Chrome上运行扩展程序?

我面临的具体用例是在调用@autoreleasepool时:在Google Chrome上可以设置chrome.notifications.create属性来为其添加按钮。 Opera不支持它,而不是忽略该属性,它会抛出一个错误:

buttons

所以我需要预先检查浏览器而不是处理错误。

2 个答案:

答案 0 :(得分:3)

你在标题中提出了错误的问题。如果通知按钮在Chrome中有效但在Opera中无效,则不要尝试检测Opera,但检测到按钮不起作用并提供后备。例如:

var options = {
    type: 'basic',
    iconUrl: '/icon.png',
    title: 'My notification',
    message: 'My message',
    buttons: [{
        title: 'Button text',
    }],
};
chrome.notifications.create(options, function onCreatedCallback() {
    var lastError = chrome.runtime.lastError;
    if (lastError && lastError.message === 'Adding buttons to notifications is not supported.') {
        delete options.buttons;
        chrome.notifications.create(options, onCreatedCallback);
    } else if (lastError) {
        console.warn('Failed to create notification: ' + lastError.message);
    } else {
        console.log('Created notification');
    }
});

如果您遇到想要检测Opera扩展环境的情况,请使用特定于Opera的扩展API,您可以使用typeof opr == 'object'/OPR/.test(navigator.userAgent)的命名空间{3}})。

否则,您可以使用UA嗅探来区分Opera和Chrome:addonPreDrawListener

如果您只想检测特定版本的Chrome / Opera(例如,由于无法以任何方式检测到的浏览器错误),请使用用户代理嗅探(Opera-only extension APIs)。

答案 1 :(得分:0)

来自How to determine in which browser your extension background script is executing?

var isOpera = (!!window.opr && !!opr.addons) || !!window.opera ||
    navigator.userAgent.indexOf(' OPR/') >= 0;