Изпращане на 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