Переключить поддержку javascript программно без перезапуска Firefox - PullRequest
1 голос
/ 07 июля 2011

Проблема: отключить поддержку JavaScript без перезапуска Firefox (и не прибегая к другому драйверу) во время тестового запуска огурца.

Если бы в браузере Firefox prefutils присутствовал javascript на веб-странице, это сделало бы это возможным. Но это не так.

Итак, есть ли плагин, который это делает? Или есть другой способ решить проблему? Или есть хороший учебник (который подчеркивает немного разоблачения) о том, как сделать такой плагин?

Редактировать

Подумав еще, как может быть полезен javascript после его отключения? Вероятно, вся идея немного испорчена.

Ответы [ 3 ]

3 голосов
/ 07 июля 2011

Я предполагаю, что ваши тесты работают с обычными правами на веб-контент. В этом случае они не смогут повлиять на настройки браузера, такие как включение JavaScript (я полагаю, это именно то, что вы подразумеваете под «переключением поддержки JavaScript»).

Я бы реализовал простой компонент XPCOM с методом включения и выключения поддержки JS (установив соответствующий преф). Вы можете представить его как глобальное свойство JavaScript, чтобы ваши тесты могли получить к нему доступ. См. Предоставление компонента XPCOM для javascript на веб-странице для получения дополнительной информации. Упакуйте свой компонент в расширение и убедитесь, что он установлен в экземпляре Firefox, где выполняются ваши тесты.

Если вы хотите получить доступ к API настроек напрямую из вашего скрипта контента, вы можете добавить следующие настройки в Firefox, либо в about: config, либо добавив следующие строки в prefs.js в каталоге вашего профиля:

user_pref("capability.principal.codebase.p1.granted", "UniversalXPConnect UniversalBrowserRead UniversalBrowserWrite UniversalPreferencesRead UniversalPreferencesWrite UniversalFileRead");
user_pref("capability.principal.codebase.p1.id", "http://www.example.com");
user_pref("capability.principal.codebase.p1.subjectName", "");`
user_pref("signed.applets.codebase_principal_support", true);

Замените www.example.com доменом, которому вы хотите предоставить привилегии. Также добавьте эту строку в код JS, прежде чем вызывать API настроек:

netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
1 голос
/ 08 июля 2011

Локальный файл (загруженный из file:///) может запрашивать дополнительные привилегии. Обычно вы получаете запрос, спрашивающий, хотите ли вы разрешить доступ - вы можете «автоматически принять» приглашение, добавив следующие строки в prefs.js в профиле Firefox:

user_pref("capability.principal.codebase.p0.granted", "UniversalXPConnect");
user_pref("capability.principal.codebase.p0.id", "file://");
user_pref("capability.principal.codebase.p0.subjectName", "");

Ваша страница может сделать:

netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var branch = Components.classes["@mozilla.org/preferences-service;1"]
                       .getService(Components.interfaces.nsIPrefBranch);
branch.setBoolPref("javascript.enabled", false);

Это определенно будет работать, если ваша страница является локальным файлом. Однако, судя по сообщению об ошибке, вы в настоящее время выполняете код с about:blank. может изменить capability.principal.codebase.p0.id на about:blank или moz-safe-about:blank, что также позволит этой странице получить расширенные привилегии, но я не уверен.

Тем не менее, ничто из этого не поможет, если JavaScript уже отключен, и вам нужно включить его. Это можно решить, только написав расширение и добавив его в профиль теста. JavaScript в расширениях Firefox работает независимо от этого параметра.

0 голосов
/ 07 июля 2011

Это означает, что вам нужен Javascript для включения или выключения Javascript.

function setJavascriptPref(bool) {
   prefs = Components.classes["@mozilla.org/preferences-service;1"]
           .getService(Components.interfaces.nsIPrefBranch);
   prefs.setBoolPref("javascript.enabled", bool);
}
...