2009-05-22 2 views
1

Also, in reinem HTML, kann ich ein Formular erstellen, das seine Ergebnisse in einen iframe lädt (anstatt den Benutzer auf die Ergebnis-URL zu verschieben).Warum wird ein HTML-Formular nicht in einen Javascript-erstellten Iframe geladen?

<html> 
    <head> 
    <title>Google Preview</title> 
    <style>iframe { width: 800px; height: 600px }</style> 
    </head> 
    <body> 
    <form method='get' action='http://www.google.com/search' target='results'> 
     <label for='q'>Google Search:</label> 
     <input name='q'/> 
    </form> 
    <!-- form result loads in this iframe --> 
    <iframe name='results'></iframe> 
    </body> 
</html> 

Ich versuche, eine ähnliche Sache in Greasemonkey zu tun und in Probleme zu laufen.

Ich habe eine Seite mit einem Formular, das ich lieber seine Ergebnisse in einen iframe laden würde, , so dass ich einen iframe erstellen und das Formular target ändern, um den iframe-Namen zu entsprechen. Dies lädt jedoch nicht die Ergebnisseite im iframe, sondern öffnet stattdessen die Ergebnisseite in einer neuen Registerkarte.

Ich habe das Problem auf die Verwendung von Javascript zum Erstellen des Iframe verfolgt. Es scheint , um den iframe in das DOM nur gut einfügen (und Blick auf firebug, die Quelle generiert ist fast identisch mit dem oben, außer für eine zusätzliche <script>-Tag). Aber wenn ich den Iframe in Javascript erstellen, bekomme ich die 'offenen Ergebnisse in einem neuen Tab' Verhalten.

<html> 
    <head> 
    <title>Google Preview</title> 
    <style>iframe { width: 800px; height: 600px }</style> 
    </head> 
    <body> 
    <form method='get' action='http://www.google.com/search' target='results'> 
     <label for='q'>Google Search:</label> 
     <input name='q'/> 
    </form> 
    <script> 
     try { 
     // form result doesn't load in this iframe, for some reason 
     const iframe = document.body.appendChild(document.createElement('iframe')); 
     iframe.name = 'results'; 
     } catch (e) { 
     alert(e); 
     } 
    </script> 
    </body> 
</html> 

Was muss ich tun, damit die Ergebnisse in einem von Javascript erstellten iFrame geladen werden? (Ich habe noch nicht document.write() ausprobiert, aber ich bin mir nicht sicher, ob das von Greasemonkey sehr nützlich wäre).

update: Also habe ich um document.write() versucht, und es funktioniert. Vielleicht werde ich nur noch herausfinden, wie das von Greasemonkey verwenden (ohne meine Vielzahl von DOM-Elementen zu vermasselt habe ich Griffe)

<html> 
    <head> 
    <title>Google Preview</title> 
    <style>iframe { width: 800px; height: 600px }</style> 
    </head> 
    <body> 
    <form method='get' action='http://www.google.com/search' target='results'> 
     <label for='q'>Google Search:</label> 
     <input name='q'/> 
    </form> 
    <script> 
     try { 
     // but form result will load in this iframe 
     document.write('<iframe name="results"></iframe>'); 
     } catch (e) { 
     alert(e); 
     } 
    </script> 
    </body> 
</html> 

Ich bin immer noch will wissen, warum document.body.appendChild() nicht funktioniert , aber document.write() tut.

Update: es scheint nicht nur Formen zu sein, ich einen Link anstelle des <form>...</form> ersetzen können und die gleichen Ergebnisse für alle drei Fälle

<div><a target="results" href="http://www.google.com">test</a></div> 

Antwort

1

Okay, ich habe eine zufriedenstellende Lösung gefunden. Ich muss den Iframe-Namen vor definieren ich rufe appendChild().

<html> 
    <head> 
    <title>Google Preview</title> 
    <style>iframe { width: 800px; height: 600px }</style> 
    </head> 
    <body> 
    <div><a target="results" href="http://www.google.com">test</a></div> 
    <script> 
     try { 
     // this works 
     const iframe = document.createElement('iframe'); 
     iframe.name = 'results'; 
     document.body.appendChild(iframe); 
     } catch (e) { 
     alert(e); 
     } 
    </script> 
    </body> 
</html> 

Ich bin mir nicht sicher, warum Sie den Namen Einstellungen, nachdem er auf das Dokument angehängt hat nicht funktioniert (und ich würde immer noch gerne wissen, ob jemand da draußen will 15pts), aber das lässt mich bekommen mit meinem GreaseMonkeying, also ist es gut genug.

-1

hmmm i get‘ Ich denke, weil es immer noch zu sich selbst zurückschickt, so dass der Rahmen nie erstellt wird (weil das Formular erstellt und auf jeder Postbackseite gerendert wird)

+0

Wenn es auf sich selbst zurückschickt, sollte nicht die Pre-Postback-Version (diejenige, in der ich das Formular eingereicht habe, die bereits einen iframe hatte) im Browser-Verlauf sein? Der Browser-Historie wird nichts hinzugefügt, was mich zu der Annahme verleitet, dass dies nicht der Fall ist. – rampion

+0

Ich habe das gerade überprüft, indem ich eine 'alert() 'in das Skript-Tag eingefügt habe. Die Warnung erscheint nur einmal (wenn ich die Seite lade), nicht nachdem ich das Formular abgeschickt habe, was mich ziemlich sicher macht, dass kein Postback stattfindet. – rampion

Verwandte Themen