2010-04-03 3 views
2

Я разработал приложение, которое имеет список элементов в одном кадре; когда вы нажимаете на элемент, он делает что-то в другом фрейме (загружает изображение).Как вызвать функцию JavaScript из одного кадра в другой в Chrome/Webkit с файловым протоколом

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

Unsafe JavaScript attempt to access frame with URL (...) from frame with URL (...). Domains, protocols and ports must match.

Это, безусловно, безопасность «особенность», но это можно обойти это?

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

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 он бросает выше ошибку ...

Edit:

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

Это должно работать нормально, если все страницы находятся в одном домене. Вы на 100% уверены, что это тот же домен (даже «www.domainname' или« domainname »)? Тот же протокол (http/https)? –

+1

На самом деле проблема специфична для файлового протокола; когда файлы обслуживаются через http и тот же домен, в Chrome нет проблем; но над файлом: // Chrome 5 выдает ошибку, как упоминалось. Весь смысл этого приложения заключается в том, чтобы не требовать установки от пользователя, который должен иметь возможность просматривать файлы непосредственно на CD-Rom (не спрашивайте! ;-), поэтому, если файл-протокол поврежден, это проблема ... Любая помощь будет принята с благодарностью! – Bambax

ответ

1

См. Ответы на близкий вопрос: Call a JavaScript function defined in an iframe in Chrome using the file protocol.

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

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

1

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

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

+0

Большое спасибо за это; см. мое редактирование вопроса: на самом деле проблема, с которой я сталкиваюсь с Chrome, возникает только при использовании файлового протокола (а не при подаче файлов с веб-сервером через http). – Bambax