Autor Zpráva
llook
Profil
Lze se nějak dostat k funkcím, které byli deklarovány v jiném rámu? K DOMu toho rámu se dostanu, ale potřeboval bych i tamní funkce.

Představoval jsem si to asi takhle:
vkladana-stranka.html

<script type="text/javascript">
function ahoj() {
alert("ahoj");
}
</script>

hlavni-stranka.html
<iframe

src="vkladana-stranka.html"
id="testframe"
width="320"
height="180"></iframe>

<script type="text/javascript">
// <![CDATA[
frame = document.getElementById("testframe");
frame.onload = function() {
this.ahoj();
}
// ]]>
</script>

Jenže to nejde (this.ahoj is not a function). Jestli to teda nějak jde, jak?
peta
Profil *
window.jmenoramu.document....
jakpsatweb - javascript - objekt window - 20 radku zespodu
llook
Profil
To má ten samý výsledek. Přes window.jmenoramu.document se dostanu k dokumentu, ale ne k javascriptovým funkcím deklarovaným v tom dokumentu.
Napadá mě, že to možná bude z bezpečnostních důvodů a já to budu muset udělat celé nějak jinak.
habendorf
Profil
Napadá mě, že to možná bude z bezpečnostních důvodů

Určitě, přesně tak.
habendorf
Profil
Ještě abych to upřesnil - v IE se přes window.jmenoramu.document.scripts se dostaneš až na scripty, ale tím to končí.
llook
Profil
Divné opatření. Když můžu k DOMu, můžu i přidávat skripty, které pak k těm funkcím můžou:
document.getElementById("testframe").onload = function() {

script = this.document.createElement("script");
script.appendChild(
this.document.createTextNode(
"ahoj();"
)
);
head = this.document.getElementsByTagName("head").item(0);
head.appendChild(script);
}
Ale sám na ně nemůžu... Ještě pouvažuju, jestli využiju tento workaround a nakonec to udělám nějak jinak.
Fred
Profil
A ten script ve vkládané stránce je externí nebo interní? Pokud by byl externí tak možná něco takového http://www.dhtmlcentral.com/tutorials/tutorials.asp?id=11
llook
Profil
Interní. Konkrétně šlo o to, že jsem chtěl s vloženou stránkou pracovat pomocí funkcí knihovny Prototype. Třeba takhle:
frame.onload = function() {

this.onload = null;
this.$("formular").submit();
}
Nakonec to vyřeším tak, že místo Prototype budu používat knihovny, které dokáží pracovat i s jiným dokumentem než window.document, třeba tenhle jednoduchý příklad bych udělal s cssQuery:
frame.onload = function() {

this.onload = null;
cssQuery("#formular", this.document)[0].submit();
}
Toto téma je uzamčeno. Odpověď nelze zaslat.

0