Как вызвать функцию JavaScript из одного фрейма в другой в Chrome / Webkit с файловым протоколом - PullRequest
2 голосов
/ 03 апреля 2010

Я разработал приложение, которое имеет список элементов в одном кадре; когда кто-то нажимает на элемент, он что-то делает в другом кадре (загружает изображение).

Раньше работал нормально во всех браузерах, включая Chrome 3; теперь он все еще отлично работает в Firefox, но в последних версиях Chrome (я считаю, начиная с 4) он выдает эту ошибку:

Небезопасная попытка JavaScript получить доступ к фрейму с URL (...) из фрейма с URL (...). Домены, протоколы и порты должны совпадать.

Это, очевидно, "функция" безопасности, но возможно ли ее обойти?

Вот простой тест:

index.html:

<html>
  <frameset cols="50%,50%">
    <frame src="left.html" name="left"/>
    <frame src="right.html" name="right"/>
    </frameset>
  </html>

left.html:

<html>
  <body>
    <a href="javascript:parent.right.test('hello');">click me</a>
    </body>
  </html>

right.html:

<html>
  <body>
    <script>
      function test(msg) {
        alert(msg);
        }
      </script>
    </body>
  </html>

Вышеописанное работает в Firefox 3.6 и Chrome 3, но в Chrome 5 выдает вышеуказанную ошибку ...

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

  • добавил атрибут @cols для элемента frameset
  • фактически он работает в Chrome тогда и только тогда, когда страницы обслуживаются по протоколу http (и из того же домена), но моя проблема в том, что страницы локальные и обслуживаются из файла: // protocol . Затем он работает в Firefox (все версии) и Chrome 3, но не в Chrome 5 (у меня нет Chrome 4, поэтому я не уверен насчет этой конкретной версии (и не знаю, возможно ли вообще загрузить конкретную версию Chrome). ?) - но для Chrome 5 я уверен, что он не работает).

Ответы [ 2 ]

1 голос
/ 25 февраля 2011

См. Ответы на тесно связанный вопрос: Вызовите функцию JavaScript, определенную в iframe в Chrome, используя протокол файла .

Вкратце, запуск Chrome с --allow-file-access-from-files "решает" проблему, поскольку об ошибке не сообщается.

Конечно, поскольку вы распространяете файлы на компакт-диске, вы вряд ли увидите это реальным решением. Я рекомендую в главной роли Chromium bug 47416 , чтобы побудить разработчиков Chromium привести Chrome в большее соответствие с поведением Gecko.

1 голос
/ 03 апреля 2010

Я попробовал ваши тестовые страницы, и они отлично работают с Chrome 4.1.249.1045 в Windows (и Firefox 3.6.3, и IE7 [после устранения проблемы ниже] ). Так что я с Пеккой (как обычно): я думаю, что проблема должна быть в другом месте.

Это не работало в IE7, и мне понадобилось целое время, чтобы понять, почему нет: вам нужно указать rows или cols для тега frameset, в противном случае IE загружает только один кадр. (Валидатор сказал бы мне это, если бы я спросил).

...