“InstallTrigger”未定义

Pra*_*rma 2 javascript firefox htmlunit

在我的 html 页面中,我有这样的代码,只有当浏览器是 Firefox 时,我才安装了扩展:

if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent))
{
  //relevant code
  InstallTrigger.install(InstallXPI);
}
Run Code Online (Sandbox Code Playgroud)

它在每个浏览器中都能正常工作。但是当通过 htmlunit 框架使用同一页面并在 webclient 中使用 browserversion.FIREFOX_3_6 参数时。它在那里显示错误:

com.gargoylesoftware.htmlunit.ScriptException: Wrapped 
com.gargoylesoftware.htmlunit.ScriptException: Wrapped 
com.gargoylesoftware.htmlunit.ScriptException: ReferenceError: "InstallTrigger" is not defined.
Run Code Online (Sandbox Code Playgroud)

对此有什么想法吗?

Wla*_*ant 6

这是给你的提醒:不要使用浏览器检测,使用特征检测。您的代码的问题:

  • InstallTrigger是 Gecko 引擎的一个特性,而不是 Firefox。但是,您正在用户代理字符串中明确查找“Firefox”,并且可能会排除其他基于 Gecko 引擎的浏览器(例如 SeaMonkey、K-Meleon、Camino)。
  • 用户代理字符串可以被欺骗,这显然是 htmlunit 正在做的 - 尽管使用不同的浏览器引擎,它声称是 Firefox。你的代码会遇到麻烦。

以下是您将如何正确执行此操作:

if ("InstallTrigger" in window)
{
  // Gecko platform, InstallTrigger available
  InstallTrigger.install(InstallXPI);
}
Run Code Online (Sandbox Code Playgroud)