4

У меня все более неприятная проблема с реализацией 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 ответ1

2

Я чувствую себя довольно глупо.

Это работает, когда вы используете 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)'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .