webForumDet fria alternativet

Komma åt element i ett öppnat fönster?

JavaScriptur Javascript

13 svar · 675 visningar · startad av Troxy

Medlem sedan mars 20041 505 inlägg
Frågan#1

Hallå,
om jag öppnar ett fönster med window.open(), såhär:

var image = window.open('image.html')

Kan jag modifiera element som finns inuti image-fönstret?
Min förhoppning var att man kunde göra såhär:

var title = image.document.getElementById('title');
...

Men det funkar inte :(
Tacksam för svar.

Medlem sedan juni 200032 967 inlägg
#2

image är reserverat - prova med annat namn. Sedan beror det ju såklart lite på vad du menar att title är för något.

I övrigt: vad menar du med "funkar inte"? Vad säger felkonsollen?

Medlem sedan mars 20041 505 inlägg
#3

Oj, slavigt att glömma bort det reserverade Image-objektet... :r

Jag har kommit fram till att det handlar om fördröjning på något vis.
Kolla in följande testkod:

var imageWin = window.open('window.html');					
alert(imageWin.document.getElementById('title')); // visar 'null'
setTimeout("alert(imageWin.document.getElementById('title'))", 100); // visar 'HTMLHeadingElement'

Vid första alerten så finns inte elementet.
100 millisekunder senare så finns det.
Jag antar att man måste vänta lite på att dokumentträdet ska hinna ladda klart?

Medlem sedan juni 20014 421 inlägg
#4

prova att kolla onreadystatechange/readyState på imageWin.document

http://msdn2.microsoft.com/en-us/library/ms534308.aspx

http://msdn2.microsoft.com/en-us/library/ms534361.aspx

Medlem sedan mars 20007 896 inlägg
#5

Och fungerar inte det, kanske du kan skicka data tillbaka till huvudfönstret?

...
<body onload="javascript: parent.document...">
...

Dvs. i det nyöppnade fönstret.

Medlem sedan juni 20014 421 inlägg
#6

fast då utan javascript: innan samt använda window.opener....

Medlem sedan aug. 20039 340 inlägg
#7

@nders skrev:

image är reserverat - prova med annat namn. Sedan beror det ju såklart lite på vad du menar att title är för något.

I övrigt: vad menar du med "funkar inte"? Vad säger felkonsollen?

Här får jag vara en wesserschmitter och säga att image faktiskt inte är reserverat. image är lika lite reserverat som Alert("Hej") fungerar, alltså inte alls. Image däremot är reserverat. (Mao, JS skiljer på de stora och små.)

Medlem sedan juni 200032 967 inlägg
#8

Stimmt, nitro!

My bad! (y)

Medlem sedan mars 20041 505 inlägg
#9

Tack för att ni hjälper mig på traven! :bire
Men jag hittar ingen smidig lösning på detta. (förutom fullösningen med setTimeout x( ).
Men låt mig förklara ett annat snarlikt problem som jag tampas med:

Jag vill öppna ett fönster med hjälp av window.open().
Det nyöppnade fönstret ska även få tillgång till ett Javascript-objekt som är definierat i det ursprungliga "opener"-fönstret.
Jag måste alltså på något sätt "bolla över" en variabel från det ursprungliga fönstret till det nyöppnade fönstret.
Hur gör jag det? :q

EDIT:
Såhär VILL jag kunna göra: x(

var obj = new someObject();
var win = window.open('sida.php');
win.obj = obj;

Enligt min logik så borde variabeln obj finnas i det nya fönstret nu.
Men det fungerar inte i Firefox eller Safari. Jag ska försöka kolla IE senare...

Medlem sedan sep. 2006867 inlägg
#10

Testa att anropa

obj = opener.obj;

i ditt nya fönster istället...

Medlem sedan mars 20041 505 inlägg
#11

headbug, det skulle fungera (y)
MEN då har jag problemet att det nya fönstret måste veta exakt vad variabeln i opener heter, och det namnet kommer nog att variera.
Mitt mål är att kunna styra det nya fönstret helt och hållet från det ursprungliga fönstret.

Mitt senaste exempel fungerar faktiskt i Windows med både IE, Firefox och Opera.
Men på iMacen så vill det inte fungera med någon läsare öht. Skumt.

Medlem sedan jan. 2005953 inlägg
#12

Läste igenom lite mer noggrant nu, och såg att jag hade missförstått. :r

Medlem sedan aug. 20039 340 inlägg
#13

metalboy: Fel tråd?

Medlem sedan mars 20041 505 inlägg
#14

Precis när man är nära att ge upp så...börjar allting fungera helt plötsligt :P

Såhär gör man för att skicka med en variabel till ett nytt fönster:

var w = window.open('page.html');
w.foo = '123' // Variabeln foo finns nu i det nya fönstret

Och såhär gör man för att komma åt elementen i ett nytt fönster:

var w = window.open('page.html');
w.onload = function() {
   var bar = w.document.getElementById('bar'); // Hämtar elementet i det nya fönstret med id="bar"
};

Tack till er alla för visat intresse!
God Jul :birp

131 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)