Firefox без той же политики происхождения
У меня все более неприятная проблема с реализацией Firefox той же политики происхождения.
Я занимаюсь разработкой интегрированной системы с поддержкой сенсорного экрана, и у нас есть возможность загружать веб-страницы в фреймах в нескольких местах на экране. Веб-страницы могут быть веб-страницами любого типа из любого домена и местоположения (Google, Yahoo, интранет-страницы и т. Д.), И в этом заключается моя проблема.
Мне нужно иметь возможность добавить событие onclick в iframe, которое дает мне идентификатор iframe (или некоторый другой уникальный идентификатор) в качестве ответа. Это говорит мне о том, что в iframe выполняется действие (просмотр веб-страниц) и что iframe не следует перезагружать (страницы настроены на фиксированный интервал автоматического обновления, который должен прерываться при выполнении действия.
Я прочитал почти все, что Google возвращает мне (но я бы хотел, чтобы меня опровергли в этом вопросе), и я нашел, что это лучшее (среди многих других) решение:
<iframe src='http://google.com' id='iframe1' onload='netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite"); this.contentWindow.document.addEventListener("click", function(event) {alert(this.id);}, false)'></iframe>
Это просто дает мне обычное разрешение, запрещенное http://localhost/ для получения свойства Window.document от http://google.com/
Я знаю, почему я получаю это сообщение об ошибке, и мой вопрос прост. Как мне это убрать?
Это интегрированная система, я могу скомпилировать Firefox из исходного кода, я могу отредактировать исходный код, если необходимо, я могу изменить prefs.js и т. Д., Но мне нужно использовать Firefox (я знаю, что все другие разумные веб-браузеры имеют хороший переключатель командной строки чтобы отключить его...) но у нас есть (довольно) тесная интеграция с платформой Firefox, которую было бы трудно удалить.
В настоящее время мы используем Firefox v.3.5.16 (я знаю, что это EOL, мы собираемся обновить его в другой раз) на платформе Debian Squeeze. При необходимости я могу перейти на более новую версию Firefox, но из того, что я нашел, кажется, что в этом вопросе дела идут еще хуже.
TL; DR Помогите мне закрыть ту же политику происхождения, любым возможным способом на Firefox 3.5.16 для интегрированной платформы, которая должна изменять код через междоменные фреймы.
1 ответ
Я чувствую себя довольно глупо.
Это работает, когда вы используете UniversalXPConnect вместо UniversalBrowserWrite.
Например: netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
Кроме того, вы не можете использовать this.id или this.parentNode.id, которые все еще дают (другую) ошибку доступа. Чтобы победить эту проблему, сначала сохраните ее во временной переменной:
onload='var tempstuff = this.id; this.contentWindow.document.addEventListener("click", function(event) {alert(tempstuff);}, false)'