"InstallTrigger" не определен - PullRequest
2 голосов
/ 01 февраля 2012

На моей html-странице у меня есть примерно такой код, где я установил расширение, только если браузер Firefox:

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

Он отлично работает в любом браузере.Но когда одна и та же страница используется через каркас htmlunit и используется аргумент browserversion.FIREFOX_3_6 в веб-клиенте.Там отображается ошибка:

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

Есть идеи по этому поводу?

1 Ответ

3 голосов
/ 01 февраля 2012

Это напоминание для вас: не используйте обнаружение браузера, используйте обнаружение функции.Проблемы с вашим кодом:

  • InstallTrigger является функцией движка Gecko, а не Firefox.Однако вы явно ищете «Firefox» в строке пользовательского агента и можете исключить другие браузеры, основанные на движке Gecko (например, SeaMonkey, K-Meleon, Camino).
  • Строки пользовательского агента могут быть подделаны, чтоочевидно, что делает htmlunit - он утверждает, что это Firefox, несмотря на использование другого движка браузера.Тогда ваш код столкнется с проблемами.

Вот как бы вы сделали это правильно:

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