AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [JS] document.write() überscheibt alles
Thema durchsuchen
Ansicht
Themen-Optionen

[JS] document.write() überscheibt alles

Ein Thema von Matze · begonnen am 31. Dez 2008 · letzter Beitrag vom 2. Jan 2009
Antwort Antwort
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

[JS] document.write() überscheibt alles

  Alt 31. Dez 2008, 18:04
Hallo zusammen,

ich habe eine HTML-Datei, die wie folgt aufgebaut ist:

Code:
<html>
   <head>
      <title>Widget-Test</title>
   </head>
   <body>
      Text

      <script type="text/javascript">
      <!--
      id = 140;
      //-->
      </script>
      <script type="text/javascript" src="http://localhost/pollunity/widget.js"></script>

      Text
   </body>
</html>
Wenn ich in der widget.js nun etwas über document.write() ausgebe, dann wird der gesamte HTML-Code überschrieben. Hinzu kommt vor der Ausgabe ein Neuladen der Seite, was zu einem Ladevorgang führt, der nicht mehr aufhört. Gebe ich nichts aus, funktioniert alles und das Skript beendet ordnungsgemäß.

Was ist da denn los?

Einen guten Rutsch wünscht
Matze
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: [JS] document.write() überscheibt alles

  Alt 31. Dez 2008, 18:56
Moin,

es waer evetnuell ganz geschickt die widget.js bzw. die relevanten Teile zu sehn, schliesslich ist da ja der Wurm drin. Die HTML-Datei ist da relativ uninteressant.

On the other hand, hast du es schonmal mit appendChild() versucht? Damit kannst du den DOM relativ leicht manipulieren.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: [JS] document.write() überscheibt alles

  Alt 31. Dez 2008, 19:21
Hi Andy,

ach du meinst der Wurm steckt darin? Hier ist der relevante Teil:

Code:
var Domain = 'http://localhost/pollunity/';
var serverFileWidgetPoll = Domain + 'ajax_widget_poll.php';
var serverFileVote = Domain + 'ajax_vote.php';

var my_ajax = new sack();
my_ajax.method = "post";
my_ajax.setVar("id", poll_id);
my_ajax.requestFile = serverFileWidgetPoll;
my_ajax.onCompletion = function(){
   show_poll(my_ajax.response);
};
my_ajax.runAJAX();

function show_poll(xml)
{
   var parser = new DOMParser();
   var doc = parser.parseFromString(xml, 'text/xml');
   
   var u_poll = doc.getElementsByTagName('u_poll')[0].firstChild.nodeValue;
   var question = doc.getElementsByTagName('question')[0].firstChild.nodeValue;
   var chart = doc.getElementsByTagName('chart')[0].firstChild.nodeValue;
   var answers = doc.getElementsByTagName('answer');

   document.write('a');
}
AppendChild nützt mir nichts, denn ich will den Source nicht in einen bestehenden Container einfügen, sondern möchte das so machen, wie es bei Google-AdSense der Fall ist: Man fügt nur JS ein und das wird dann "ersetzt".

Über document.write() möchte ich dann HTML-Code ausgeben.

Grüße, Matze

Edit: [code]- durch [c]-Tag ersetzt.
Edit 2: Selbst wenn in der FUnktion "show_poll()" nur ein "document.write()" steht, tritt das Problem auf. Das muss mit dem AJAX-Code zusammenhängen.
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#4

Re: [JS] document.write() überscheibt alles

  Alt 1. Jan 2009, 10:03
Zitat von Matze:
AppendChild nützt mir nichts, denn ich will den Source nicht in einen bestehenden Container einfügen, sondern möchte das so machen, wie es bei Google-AdSense der Fall ist: Man fügt nur JS ein und das wird dann "ersetzt".
Kurz gesagt, du fuegst immer in einen Container ein. Wenn du keinen spezifischen raussuchst bzw. document.write() verwendest, ist eben das body-Tag dieser Container.

Setze mal das document.write() in eine Warteschleife (setTimeout), es kann naemlich durchaus sein dass der Browser zicken macht weil die Seite noch nicht komplett geladen ist. Du solltest in diesem Fall immer mit dem onload-Handler arbeiten, um sicherzustellen dass die Seite fertig ist bevor du darin rumpfuschst.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: [JS] document.write() überscheibt alles

  Alt 1. Jan 2009, 10:12
Moin Andy

Zitat von alcaeus:
Kurz gesagt, du fuegst immer in einen Container ein. Wenn du keinen spezifischen raussuchst bzw. document.write() verwendest, ist eben das body-Tag dieser Container.
Hm gut, aber Google schafft es ja auch irgendwie. Mehr als das hier muss man dazu auf seiner Seite auch nicht einfügen:

Code:
<script type="text/javascript"><!--
google_ad_client = "...";
google_ad_slot = "...";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
Zitat von alcaeus:
Setze mal das document.write() in eine Warteschleife (setTimeout), es kann naemlich durchaus sein dass der Browser zicken macht weil die Seite noch nicht komplett geladen ist. Du solltest in diesem Fall immer mit dem onload-Handler arbeiten, um sicherzustellen dass die Seite fertig ist bevor du darin rumpfuschst.
setTimeout bewirkt leider keine Änderung. Sobald "document.write()" ausgeführt wird, beginnt der Neuladevorgang und der alte Inhalt wird gelöscht, zumindest rotiert dann im FF das Lade-Icon. Einen Onload-Handler kann ich nicht nutzen, da ich es genauso haben möchte, wie Google es macht. Das gibt ein Skript, was andere auf ihrer Website einbinden können sollen.

Edit: Ich habe mal eine Demo hochgeladen. Das Timeout beträgt nun 3s, also nach 3s beginnt das Neuladen (zumindest im FF): Demo

Grüße, Matze
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#6

Re: [JS] document.write() überscheibt alles

  Alt 1. Jan 2009, 11:56
Moin,

ich bin grad aufm Sprung raus, werds mir aber heute Abend zu Hause nochmal angucken. Ich konnte das Problem im Firefox nachvollziehn, wuerde das Problem aber erstmal komplett durchtesten (sprich isolieren), ist ja schliesslich auch fuer mich interessant zu wissen worans liegt

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: [JS] document.write() überscheibt alles

  Alt 1. Jan 2009, 20:25
Moin,

ich frage mich gerade, ob das mit AJAX überhaupt geht. Ich habe das testweise nun über einen zusätzlichen Div-Container mit einer eigenen ID versucht, aber im Prinzip benötige ich externen Zugriff, obwohl alles auf dem eigenen Server liegt, befürchte ich

Grüße
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: [JS] document.write() überscheibt alles

  Alt 2. Jan 2009, 11:02
Das Problem hat sich nun erledigt. Ein Workaround ist im Thread Web-Widget, welche Technik sollte genutzt werden? zu finden.

Grüße
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz