2012-02-01 108 views
1

在我的html页面,我有代码这样的事情,在那里我已经安装了一个扩展仅当浏览器是火狐:“InstallTrigger”没有定义

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. 

对此有何想法?

回答

2

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

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

这里是你将如何做正确:

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

感谢@wladimir ...ü是正确的特征检测是针对解答更有用.thanks – 2012-02-01 07:55:02