- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试检测用户浏览器上是否安装了扩展程序。
我试过这个:
var detect = function(base, if_installed, if_not_installed) {
var s = document.createElement('script');
s.onerror = if_not_installed;
s.onload = if_installed;
document.body.appendChild(s);
s.src = base + '/manifest.json';
}
detect('chrome-extension://' + addon_id_youre_after, function() {alert('boom!');});
如果浏览器安装了扩展程序,我会收到如下错误:
Resources must be listed in the web_accessible_resources manifest key in order to be loaded by pages outside the extension
GET chrome-extension://invalid net::ERR_FAILED
如果没有,我会得到一个不同的错误。
GET chrome-extension://addon_id_youre_after/manifest.json net::ERR_FAILED
我试图捕捉错误 (fiddle)
try {
var s = document.createElement('script');
//s.onerror = window.setTimeout(function() {throw new Error()}, 0);
s.onload = function(){alert("installed")};
document.body.appendChild(s);
s.src = 'chrome-extension://gcbommkclmclpchllfjekcdonpmejbdp/manifest.json';
} catch (e) {
debugger;
alert(e);
}
window.onerror = function (errorMsg, url, lineNumber, column, errorObj) {
alert('Error: ' + errorMsg + ' Script: ' + url + ' Line: ' + lineNumber
+ ' Column: ' + column + ' StackTrace: ' + errorObj);
}
到目前为止,我无法捕捉到错误..
任何帮助将不胜感激
最佳答案
第一个错误是来自 Chrome 的信息,直接注入(inject)到控制台中,您无法捕获(如您所见)。
GET
错误来自网络堆栈。 Chrome 在任何一种情况下都拒绝加载并模拟网络错误 - 您可以 catch with onerror
handler on the element itself , 但不在 window.onerror
处理程序。引用,强调我的:
When a resource (such as an
<img>
or<script>
) fails to load, an error event using interfaceEvent
is fired at the element, that initiated the load, and theonerror()
handler on the element is invoked. These error events do not bubble up to window, but (at least in Firefox) can be handled with a single capturingwindow.addEventListener
.
这是一个至少可以检测网络错误的示例。请再次注意,您无法捕获它们,因为它无法显示在控制台中。这是一个source of an embarrasing problem当 Google Cast 扩展程序(公开资源)将其用作检测方法时。
s.onload = function(){alert("installed")};
s.error = function(){alert("I still don't know")};
请注意,您无法区分两者。在内部,Chrome 将其中一个请求重定向到 chrome-extension://invalid
,但是这样的重定向对您的代码是透明的:无论是加载资源(就像您所做的那样)还是使用 XHR。即使是新的 Fetch API,它应该可以对重定向进行更多控制,但也无济于事,因为它不是 HTTP 重定向。它得到的只是一个无信息的网络错误。
因此,您无法检测扩展是否未安装或已安装,但不会公开资源。
请理解这是有意为之的。您提到的方法曾经有效 - 您可以获取已知名称的任何资源。但这是一种指纹浏览器的方法 - 谷歌明确称其为“恶意”并希望阻止的方法。
因此,web_accessible_resources
模型在 Chrome 18 中引入(一直追溯到 2012 年 8 月)以保护扩展免受嗅探 - 需要 explicitly declare resources暴露的。引用,强调我的:
Prior to manifest version 2 all resources within an extension could be accessed from any page on the web. This allowed a malicious website to fingerprint the extensions that a user has installed or exploit vulnerabilities (for example XSS bugs) within installed extensions. Limiting availability to only resources which are explicitly intended to be web accessible serves to both minimize the available attack surface and protect the privacy of users.
由于 Google 积极打击指纹识别,因此只能可靠地检测到合作的扩展程序。 可能存在特定于扩展的 hack - 例如特定的 DOM 更改、请求拦截或您可以获取的公开资源 - 但没有通用的方法,并且扩展可能随时更改其“可见签名”。我在这个问题中解释过:Javascript check if user has a third party chrome extension installed ,但我希望您能更好地理解其中的原因。
总而言之,如果您确实找到了一种通用方法来暴露指纹识别的任意扩展,这将被认为是恶意的,并且是 Chrome 中的隐私漏洞。
关于google-chrome-extension - 如何检测浏览器上的扩展名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40356596/
我的“登录”是在 IE 浏览器中进行的,登录后,如果我单击链接,它们就会在 Chrome 浏览器中打开。如何在同一个测试用例中将我当前的浏览器从 IE 切换到 Chrome。如果我创建一个 chrom
您好,我不明白在 Firefox 的内容属性中使用的特殊字符的不同显示行为。我已经剥离了一切并创造了一支笔: http://codepen.io/rpkoller/pen/Fbgav 在其“基本形式”
我正在研究 Spring Data REST,特别是 HAL 浏览器。我一直在关注 http://docs.spring.io/spring-data/rest/docs/current/refere
我正在使用工具提示,在 ie 上出现定位错误。我放了jquery浏览器代码 我的工具提示 $('.tooltip').tooltip({ position: "bottom center"
我应该如何处理蓝鸟协程中的错误? 我使用co in节点已有一段时间,它具有出色的捕获功能。 co(function*() { return new Promise(function(resol
package webviewbrowser; import java.util.List; import javafx.application.Application; import javafx.
我有一些 JavaScript 在同一域上的两个独立服务器之间共享请求。 .com 是 JavaScript 中域的要求吗? 在这种情况下,两台服务器都位于 .abc.tyy 域上,tyy 通常是 .
package webviewbrowser; import java.util.List; import javafx.application.Application; import javafx.
我正在尝试构建仍支持 NPAPI 的先前版本的 Chromium 浏览器。我已经获得了代码,并且可以使用 stand build 命令在我的 mac 上构建最新版本的 Chromium gclient
我环顾四周,找不到 browscap 的 Python 等效项(我在 PHP 中使用它来检测给定的用户代理字符串是什么浏览器。 我希望我不必自己写......:P 最佳答案 看看这个,它应该做你想要的
是否有任何 chrome 或 firefox 扩展允许 javascript 在客户端 PC 中创建写入文件? 最佳答案 你想做什么? HTML5 有一个 File API .这是最好的解决方案,因为
当我点击链接或刷新或关闭标签页时,我有这段代码会发出警报。 但我需要在关闭 窗口(选项卡)上仅 发出警报。怎么做? 我的网站上有很多外部和内部链接。
我目前正在尝试使用 Browserify + Angular,但我遇到了一个奇怪的问题。我在我的 Controller 的子目录中创建了一个名为 controllers/start-controlle
我正在为客户(项目已被接受,但现在是解释不同功能的问题)写一份详细的估算,以开发一个响应式布局的网站。 这不是我第一次进行此类开发,但这是一个关键客户,必须铺平道路。 布局将从 300px 宽度调整到
我在时事通讯上设计了一些黑底白字。由于时事通讯在打印时看起来不错且可读。我需要使布局和文本与浏览器中的内容相似。 通常情况下,黑色文本和无背景颜色是浏览器/网络邮件客户端的默认打印样式吗? 最佳答案
我有一个使用 GWT/mGWT 构建的移动友好网络应用程序。该应用程序有白色输入文本框和深灰色输入文本。但是,在 Android 浏览器上,文本显示为白色,因此是不可见的。我尝试的所有 CSS 都无法
我创建了一个带有选择输入的页面来更改正在使用的 jQuery UI 主题。当主题更改时,它会存储在 cookie 中。页面加载时,如果 cookie 存在,则恢复主题,否则加载默认主题。 当我使用 F
在我的 CSS 中,我使用了以下代码片段: word-break: break-word; -webkit-hyphens: auto; hyphens: auto; 渲染引擎如何知道在所有不同语言中
我的网络浏览器 Safari 有问题,我在 Chrome、FireFox 中测试了我的网站。 Safari 版本也是正确的,但是,当需要在 1920x1080 或更高分辨率下对其进行测试时,它无法正常
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我是一名优秀的程序员,十分优秀!