/ / "InstallTrigger" не визначено - javascript, firefox, htmlunit

"InstallTrigger" не визначено - javascript, firefox, htmlunit

У моїй 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.

Будь-яка ідея про це?

Відповіді:

2 для відповіді № 1

Це нагадування для вас: не використовуйте браузер, використовуйте функцію виявлення. Проблеми з вашим кодом:

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

Ось як правильно це зробити:

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