探测扩展时获取 net::ERR_FAILED 错误
有一个特定的 Chrome 扩展程序,我想通过
XMLHttpRequest
从中获取 PNG 文件。如果扩展程序已启用,我想将“load”写入控制台,如果扩展程序已禁用,我想将“error”写入控制台。
它工作正常,但如果扩展程序已禁用,Chrome 会在控制台中写入一个我不想出现的错误:
如何从控制台中删除此错误?
(我尝试过
window.onerror
,但没有工作)
代码:
var loadHref = function(href) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onload = function(){console.log('load')};
xmlhttp.onerror = function() {console.log('error');};
xmlhttp.open('GET', href);
xmlhttp.send();
}
loadHref('chrome-extension://77672b238520494cba8855547dd00ba8/img/icon24.png');
基本上,您无法消除这些错误,因为它们不是 JS 错误,而是网络错误。
假设您的目标是检测是否存在特定扩展:
-
假设您在特定域中需要它,并且需要由您控制的特定扩展。
在这种情况下,最佳方法是
externally_connectable
通信 。这是一个 示例 。 -
假设您需要在一个事先未知的非特定域中使用它,但您可以控制扩展。
在这种情况下,可以注入 内容脚本 (可能使用
"run_at": "document_start"
)并向文档添加一些内容以表明扩展的存在。例如, 注入设置变量的页面级脚本 。 -
假设您无法控制扩展程序。
那么,在这种情况下,您就完蛋了。如果扩展程序不以上述方式配合,探测其可通过网络访问的资源(如果有!)是检测它的唯一方法,而无需观察 DOM 中的特定内容脚本活动(再次,如果有)。
实际上,google-cast-sdk 中已经存在一个 未安装 chrome cast 扩展程序时出错 的问题,并且根据问题跟踪器,该问题尚未完全解决。但是,以下其中一条 评论 给出了解决方法:
the workarounds would be to either install the Google Cast extension or disable network warnings (please note you may miss some warnings that could be on interest to you) so you don't see these additional logs.
并且,您也可以尝试此 SO 帖子中给出的可能解决方案 - 如果未安装 chrome cast 扩展程序或使用隐身模式,则 Google chrome cast 发送方会出错 ,谁知道呢,它可能会有所帮助。:)