it-swarm-eu.dev

Mohu předat proměnnou JavaScript do jiného okna prohlížeče?

Mám stránku, která spouští okno prohlížeče. Mám proměnnou JavaScriptu v rodičovském okně prohlížeče a chtěla bych ji předat do vyskakovacího okna prohlížeče.

Existuje způsob, jak toho dosáhnout? Vím, že to lze udělat přes rámy ve stejném okně prohlížeče, ale nejsem si jistý, jestli to může být provedeno přes okna prohlížeče.

63
Tom Kidd

Pokud jsou okna ze stejné domény zabezpečení a máte odkaz na jiné okno, pak ano.

Metoda open () Javascriptu vrátí odkaz na vytvořené okno (nebo existující okno, pokud znovu použije existující). Každé okno vytvořené tímto způsobem získá vlastnost, která se na něj použije "window.opener" a ukazuje na okno, které ho vytvořilo.

Buď pak můžete použít DOM (zabezpečení v závislosti na) pro přístup k vlastnostem druhého nebo jeho dokumentů, rámců atd.

39
MarkR

Uvedení kódu do záležitosti můžete provést z nadřazeného okna:

var thisIsAnObject = {foo:'bar'};
var w = window.open("http://example.com");
w.myVariable = thisIsAnObject;

nebo z nového okna:

var myVariable = window.opener.thisIsAnObject;

Dávám přednost druhé, protože budete pravděpodobně muset počkat, až se nová stránka stejně načte, takže budete mít přístup k jejím prvkům, nebo co chcete.

93
Victor

Ano, skripty mohou přistupovat k vlastnostem jiných oken ve stejné doméně, na které mají popisovač (obvykle jsou získávány prostřednictvím window.open/opener a window.frames/parent). To je obvykle více zvládnutelné volat funkce definované na jiném okně spíše než se pohnout s proměnnými přímo.

Nicméně, okna mohou zemřít nebo jít dál, a prohlížeče se zabývají jiným způsobem, když to dělají. Zkontrolujte, zda je okno (a) stále otevřené (! Window.closed) a (b) má očekávanou funkci, než se pokusíte o její volání.

Jednoduché hodnoty jako řetězce jsou v pořádku, ale obecně není dobré předávat složité objekty, jako jsou funkce, prvky DOM a uzávěry mezi okny. Pokud podřízené okno uloží objekt z jeho otvírače, pak se zavírač zavře, tento objekt se může stát 'mrtvý' (v některých prohlížečích, například IE), nebo způsobit únik paměti. Mohou vzniknout divné chyby.

7
bobince

Předávání proměnných mezi okny (pokud jsou okna ve stejné doméně) lze snadno provést pomocí: 

  1. Soubory cookie 
  2. místní úložiště. Jen se ujistěte, že váš prohlížeč podporuje localStorage, a udělejte si právo na změnu údržby (add/delete/remove), abyste udrželi localStorage čistý. 
3
Roman M

Proměnné a odkazy na věci v nadřazeném okně můžete snadno předávat:

// open an empty sample window:
var win = open("");
win.document.write("<html><body><head></head><input value='Trigger handler in other window!' type='button' id='button'></input></body></html>");

// attach to button in target window, and use a handler in this one:
var button = win.document.getElementById('button');

button.onclick = function() {
     alert("I'm in the first frame!");   
}
2
knut

Zprávu z okna „rodič“ můžete odeslat do okna „dítě“:

v rodičovském okně otevřete dítě

    var win = window.open(<window.location.href>, '_blank');    
       setTimeout(function(){
                    win.postMessage(SRFBfromEBNF,"*")
                  },1000);
    win.focus();

být nahrazen podle kontextu

V „dítěti“

    window.addEventListener('message', function(event) {
        if(event.srcElement.location.href==window.location.href){
        /* do what you want with event.data */
        }
    }); 

Test musí být změněn podle kontextu

2
Brault Gilbert

V rodičovském okně:

var yourValue = 'something';
window.open('/childwindow.html?yourKey=' + yourValue);

Pak v childwindow.html:

var query = location.search.substring(1);
var parameters = {};
var keyValues = query.split(/&/);
for (var keyValue in keyValues) {
    var keyValuePairs = keyValue.split(/=/);
    var key = keyValuePairs[0];
    var value = keyValuePairs[1];
    parameters[key] = value;
}

alert(parameters['yourKey']);

Tam je potenciálně hodně kontroly chyb byste měli dělat v analýze vašich párů klíč/hodnota, ale já nejsem to tady. Možná, že někdo může poskytnout více rutiny analýzy řetězců dotazů v jazyce JavaScript v pozdější odpovědi.

2
Grant Wagner

Ano, lze to provést, dokud jsou obě okna ve stejné doméně. Funkce window.open () vrátí popisovač do nového okna. Podřízené okno může přistupovat k nadřazenému oknu pomocí prvku DOM "otvírák".

1
Jordan Mack

Můžete použít window.name jako přenos dat mezi okny - a funguje to i přes doménu. Není oficiálně podporován, ale z mého pochopení, vlastně funguje velmi dobře přes prohlížeč.

Více informací naleznete na této stránce Stackoverflow Post

0
Brad Parks

Případně jej můžete přidat do URL a nechat skriptovací jazyk (PHP, Perl, ASP, Python, Ruby, cokoliv) na druhé straně. Něco jako:

var x = 10;
window.open('mypage.php?x='+x);
0
Milan Babuškov

Snažil jsem se úspěšně předat argumenty do nově otevřeného okna.
Zde je to, co jsem přišel:

function openWindow(path, callback /* , arg1 , arg2, ... */){
    var args = Array.prototype.slice.call(arguments, 2); // retrieve the arguments
    var w = window.open(path); // open the new window
    w.addEventListener('load', afterLoadWindow.bind(w, args), false); // listen to the new window's load event
    function afterLoadWindow(/* [arg1,arg2,...], loadEvent */){
        callback.apply(this, arguments[0]); // execute the callbacks, passing the initial arguments (arguments[1] contains the load event)
    }
}

Příklad volání:

openWindow("/contact",function(firstname, lastname){
    this.alert("Hello "+firstname+" "+lastname);
}, "John", "Doe");

Živý příklad

http://jsfiddle.net/rj6o0jzw/1/

0
singe3