Отправка переменных javascript во фрейм

Я пытаюсь объединить некоторые динамические параметры, которые отправляются через URL-адрес, во фрейм, но ничего не работает. Пробовал их внутри тегов, снаружи, до, после... Может кто-нибудь пролить свет на это?

URL в верхнем фрейме: http://www.someurl.com/someparameters.html?country=EN_US. Первый скрипт получит язык (EN) и рынок (US). Затем создается набор фреймов с другой страницей и нашей целевой страницей, которую следует вызывать по ссылке "http://www.someurl.com/somefolders?LANGUAGE=EN&MARKET=US&somefixedparameters=123"

Это исходный код набора фреймов, который не работает.

<!DOCTYPE html>
<html>
<script type="text/javascript"><!--
var url = window.location.href;
var language = url.substr(url.indexOf("country=") + 8,2);
var market = url.substr(url.indexOf("country=") + 11,2);
}
</script>
<frameset rows="36px,*" frameborder="0">
<frame id="main" src="header_cgh.html?country=BR_OP" noresize="noresize" scrolling="no" border="1" bordercolor=white>
<frame id="flow" src="">
</frameset>
<script type="text/javascript"><!--
document.getElementById("flow").src = "http://www.someurl.com/somefolders?LANGUAGE=" + language + "&MARKET=" + market + "&somefixedparameters=123";
</script>
</html>

Спасибо за вашу помощь!

ОБНОВЛЕНИЕ: после открытия консоли Javascript Chrome и ввода команды:

document.getElementById("flow").src = "http://www.someurl.com/somefolders?LANGUAGE=" + language + "&MARKET=" + market + "&somefixedparameters=123"

Он вернул ожидаемый результат. Но это не произойдет само по себе.


person recacon    schedule 03.12.2014    source источник
comment
Попробуйте поделиться файлом jsfiddle.   -  person taco    schedule 03.12.2014
comment
Странно то, что набор фреймов загружается, загружается первый фрейм. Когда я открываю Chrome и копирую и вставляю в консоль одну и ту же запись ||document.getElementById(flow).src = someurl.com/somefolders?LANGUAGE= + язык + &MARKET= + рынок + &somefixedparameters=123;|| загружается правильно. Так что я думаю, что где-то не хватает триггера.   -  person recacon    schedule 03.12.2014


Ответы (2)


Измените свой скрипт на это:

window.onload = function() {
    var url = window.location.href;
    var language = url.substr(url.indexOf("country=") + 8,2);
    var market = url.substr(url.indexOf("country=") + 11,2);
    document.getElementById("flow").src = "/somefolders?language=" + language + "&market=" + market;
}

И поместите его в тег script в вашем head.

Кроме того, на заметку: если кто-то запрашивает главную страницу набора фреймов без строки запроса или без параметра country, то indexOf возвращает -1, и вы получаете ерунду в ваших переменных language и market. Вы захотите придумать более надежный способ получения этой информации.

person Josiah Keller    schedule 03.12.2014
comment
Спасибо и за наводку. Я попробую обходной путь для этого. В любом случае, поскольку страница работает в киоске, и первоначальный запрос всегда будет выполняться через ярлык/ссылки, созданные для этой среды, мне просто нужно убедиться, что у них всегда есть эта информация. - person recacon; 04.12.2014

Вот пример использования postMessage. Посмотрите, справляется ли это с тем, что вы ищете:

<iframe src="http://a.JavaScript.info/files/tutorial/window/receive.html" id="iframe" style="height:60px"></iframe>

<form name="form">
  <input type="text" name="msg" value="Your message"/>
  <input type="submit"/>
</form>

<script>

  var win = document.getElementById("iframe").contentWindow

  document.forms.form.onsubmit = function() {
    win.postMessage(
      this.elements.msg.value,
      "http://a.JavaScript.info" 
    )
    return false
  }

</script>

Из http://javascript.info/tutorial/cross-window-messaging-with-postmessage

person Jase Pellerin    schedule 03.12.2014