Как вызвать функцию JavaScript из одного кадра в другой в Chrome / Webkit с файловым протоколом

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

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

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

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

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

index.html:

      

left.html:

   click me   

right.html:

    function test(msg) { alert(msg); }    

Вышеизложенное работает в Firefox 3.6 и Chrome 3, но в Chrome 5 он выдает указанную выше ошибку …

Изменить :

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

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

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

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

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

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