Javascript &引用;“安装触发器”;没有定义

Javascript &引用;“安装触发器”;没有定义,javascript,firefox,htmlunit,Javascript,Firefox,Htmlunit,在我的html页面中,我有这样的代码,只有在浏览器为Firefox时,我才安装了扩展: if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)) { //relevant code InstallTrigger.install(InstallXPI); } 它在每个浏览器中都能正常工作。但当同一页面通过htmlunit框架使用,并在webclient中使用browserversion.FIREFOX\u 3\u 6参数时。它显示了

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

if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent))
{
  //relevant code
  InstallTrigger.install(InstallXPI);
}
它在每个浏览器中都能正常工作。但当同一页面通过htmlunit框架使用,并在webclient中使用browserversion.FIREFOX\u 3\u 6参数时。它显示了一个错误:

com.gargoylesoftware.htmlunit.ScriptException: Wrapped 
com.gargoylesoftware.htmlunit.ScriptException: Wrapped 
com.gargoylesoftware.htmlunit.ScriptException: ReferenceError: "InstallTrigger" is not defined.

有什么想法吗?

这是给你的提醒:不要使用浏览器检测,使用功能检测。代码中的问题:

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

if ("InstallTrigger" in window)
{
  // Gecko platform, InstallTrigger available
  InstallTrigger.install(InstallXPI);
}

谢谢@wladimir…你是对的,功能检测更有用。谢谢你的回答