/ / “InstallTrigger” n'est pas défini - javascript, firefox, htmlunit

“InstallTrigger” n'est pas défini - javascript, firefox, htmlunit

Dans ma page html, j'ai un code quelque chose comme ceci, où j'ai installé une extension seulement si le navigateur est Firefox:

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

Cela fonctionne bien dans tous les navigateurs. Mais lorsque la même page est utilisée via htmlunit framework et à l'aide de l'argument browserversion.FIREFOX_3_6 dans webclient. Cela montre une erreur ici:

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

Une idée à ce sujet?

Réponses:

2 pour la réponse № 1

Ceci est un rappel pour vous: n’utilisez pas la détection de navigateur, utilisez la détection de fonctionnalité. Les problèmes avec votre code:

  • InstallTrigger est une fonctionnalité du moteur Gecko, pas de Firefox. Cependant, vous recherchez explicitement "Firefox" dans la chaîne de l'agent utilisateur et pouvez exclure d'autres navigateurs basés sur le moteur Gecko (par exemple, SeaMonkey, K-Meleon, Camino).
  • Les chaînes de l'agent utilisateur peuvent être usurpées, ce qui est apparemment ce que fait htmlunit: il prétend être Firefox même s'il utilise un moteur de navigateur différent. Votre code rencontrera alors des problèmes.

Voici comment vous le feriez correctement:

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