У моїй 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);
}