[Fx/JS] Functie uitvoeren in specifieke window context

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • cyberstalker
  • Registratie: September 2005
  • Niet online

cyberstalker

Eersteklas beunhaas

Topicstarter
Ik moet voor een bestaande webapplicatie die gebruik maakt van iframes javascript functies uitvoeren in een specifieke window context. Dit gaat prima in alle browsers behalve Firefox. Ter illustratie de twee volgende bestanden:

test.html
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML>
<html>
    <head>
        <title>Outer frame</title>
        <script type="application/javascript">
            var serialized = "[1,2,3]";
            window.addEventListener('load', function() {
                var win = document.getElementsByTagName('iframe').item(0).contentWindow;
                var res = win.JSON.parse(serialized);

                console.log(res instanceof Array);
                win.isThisAnArray(res);
            }, false);
        </script>
    </head>
    <body>
        <div>This content comes from the outer frame</div>
        <iframe src="test2.html"></iframe>
    </body>
</html>


test2.html
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE HTML>
<html>
    <head>
        <title>Inner frame</title>
        <script type="application/javascript">
            function isThisAnArray(arr)
            {
                console.log(arr instanceof Array);
            }
        </script>
    </head>
    <body>
        <div>This content comes from the inner frame</div>
    </body>
</html>


Het probleem is dat de JSON.parse niet in de context van het binnenste iframe gebeurt, waardoor de uitgepakte array niet instanceof Array is volgens het binnenste venster.

In de webapplicatie is het zo dat er in de iframes functies zitten die al geparsede data verwachten en ik enkel de functies in het buitenste frame kan aanpassen. Ik moet dus op de een of andere manier de JSON.parse methode kunnen aanroepen zodat de Array wordt geconstruct in de context van dat iframe.

Ik kan op google niets vinden over dit probleem, waarschijnlijk is dit doordat ik niet goed weet waarop te zoeken.

Ik ontken het bestaan van IE.


Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Je kunt proberen om een script tag te injecteren in de binnenste window context en daarmee expliciet binnen die binnenste window context een wrapping functie declareren om window.JSON.parse heen. Als je deze daarna aanroept met de nog niet verwerkte JSON string zou alles correct moeten deserializeren.

Dit probleem is trouwens ook al eens op StackOverflow ter sprake gekomen; het loopt al sinds zeker Firefox 3.5.

[ Voor 9% gewijzigd door R4gnax op 16-08-2011 22:37 ]