Chrome 扩展如何在运行时检查它是否在 Opera 上是 运行?
How can a Chrome extension check at runtime if it is running on Opera?
由于 Opera 支持 Chrome 扩展 API,几乎可以在该浏览器上 运行 一个功能齐全的 Chrome 扩展。但是 API.
中仍然缺少一些功能
是否有一种简单有效的方法来检查扩展当前是否在 Opera 上 运行ning 或 Google Chrome?
我面临的具体用例是在调用 chrome.notifications.create
时:在 Google Chrome 上可以设置 buttons
属性以向其添加按钮. Opera 不支持它,它不会忽略该属性,而是抛出一个错误:
Unchecked runtime.lastError while running notifications.create: Adding buttons to notifications is not supported.
所以我需要一种方法来预先检查浏览器而不是处理错误。
你在标题中问错了问题。如果通知按钮在 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-specific 扩展 API,您可以使用 typeof opr == 'object'
(这是 Opera-only extension APIs 的命名空间)。
否则,您可以使用 UA-sniffing 来区分 Opera 和 Chrome:/OPR/.test(navigator.userAgent)
.
如果您只想检测特定版本的 Chrome/Opera(例如,由于无法以任何方式检测到浏览器错误),请使用用户代理嗅探 (How to find the version of Chrome browser from my extension?)。
来自
var isOpera = (!!window.opr && !!opr.addons) || !!window.opera ||
navigator.userAgent.indexOf(' OPR/') >= 0;
由于 Opera 支持 Chrome 扩展 API,几乎可以在该浏览器上 运行 一个功能齐全的 Chrome 扩展。但是 API.
中仍然缺少一些功能是否有一种简单有效的方法来检查扩展当前是否在 Opera 上 运行ning 或 Google Chrome?
我面临的具体用例是在调用 chrome.notifications.create
时:在 Google Chrome 上可以设置 buttons
属性以向其添加按钮. Opera 不支持它,它不会忽略该属性,而是抛出一个错误:
Unchecked runtime.lastError while running notifications.create: Adding buttons to notifications is not supported.
所以我需要一种方法来预先检查浏览器而不是处理错误。
你在标题中问错了问题。如果通知按钮在 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-specific 扩展 API,您可以使用 typeof opr == 'object'
(这是 Opera-only extension APIs 的命名空间)。
否则,您可以使用 UA-sniffing 来区分 Opera 和 Chrome:/OPR/.test(navigator.userAgent)
.
如果您只想检测特定版本的 Chrome/Opera(例如,由于无法以任何方式检测到浏览器错误),请使用用户代理嗅探 (How to find the version of Chrome browser from my extension?)。
来自
var isOpera = (!!window.opr && !!opr.addons) || !!window.opera ||
navigator.userAgent.indexOf(' OPR/') >= 0;