Доступ к переменным JavaScript в разных фреймах в Chrome - PullRequest
1 голос
/ 12 февраля 2011

У меня проблемы с передачей значений JavaScript между кадрами в Chrome.В других браузерах (Opera и Firefox) это работает.Первый кадр содержит следующий HTML-код:

<script> variable="frame 1 value";</script>
<a href="" onclick="javascript:parent.frames[1].location='test.html';">click here</a>

, а test.html:

<html>
<head>
<script>window.onload = function() {
  div = document.getElementById("fred");
  div.innerHTML="<b>" + top.frames[0].variable + "</b>";
  }
</script>
</head>
<body>
  <div id="fred">
hi there</div>
</body>
</html>

. Я просматривал этот сайт и другие, и в нем было предположение, что, посколькустраницы работают в разных процессах, они не могут передавать значения.Это правда, и если да, то есть ли способ обойти это (куки?)только по файловому протоколу.Как и автор другого вопроса, я пишу приложение, предназначенное для запуска с компакт-диска, поэтому мне нужно использовать файловый протокол.Я использую версию Chrome 9.0.

ry

Ответы [ 3 ]

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

HTML5 Хранилище на помощь! Для первого кадра:

<script>localStorage.setItem('variable', 'frame 1 value');</script>
<a href="#" onclick="javascript:parent.frames[1].location='test.html';return false">click here</a>

А для test.html:

<html><head>
    <script>
        window.onload = function() {
            div = document.getElementById("fred");
            div.innerHTML="<b>" + localStorage.getItem('variable') + "</b>";
        }
    </script>
</head><body>
    <div id="fred">hi there</div>
</body></html>

Предупреждение: IE7 и некоторые старые браузеры не поддерживают localStorage. Однако вы должны быть в состоянии использовать if (typeof(localStorage) == 'undefined') {}, чтобы определить, какой метод вам нужно использовать.

1 голос
/ 09 апреля 2011

Фреймы устарели с 1997 года (спецификация HTML 4.0) по многим причинам, поэтому лучше не использовать их.

Вы также можете запустить Chrome с аргументом командной строки --disable-web-security,но это тоже плохая рекомендация.

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

Это как-то связано с межсайтовым скриптингом, что может быть проблемой безопасности.Поскольку Chrome ведет себя очень строго по этому вопросу, добиться того, чего вы хотите, должно быть невозможно.

К счастью, вы можете использовать изящный прием (если ваша переменная - только строка):

  1. Измените ссылку в первом кадре для проверки.html? foo = bar

  2. Считать window.location.href во втором кадре.Это даст что-то вроде "Z: \ folder \ test.html? Foo = bar".Теперь вы можете использовать функции манипуляции со строками для извлечения значения foo (в случае: bar) из href.

...