“InstallTrigger”未定义

时间:2012-02-01 07:08:37

标签: javascript firefox htmlunit

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

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

它适用于每个浏览器。但是当通过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.

对此有何想法?

1 个答案:

答案 0 :(得分:3)

这是一个提醒您:不要使用浏览器检测,使用功能检测。您的代码存在问题:

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

以下是如何正确完成的工作:

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