Avatar billede cronick Nybegynder
28. september 2008 - 15:09 Der er 20 kommentarer og
1 løsning

Handlingen blev afbrudt

Hey,

Fejlen "Internet Explorer kan ikke åbne Internetstedet ... Handlingen blev afbrudt" har efterhånden været fremkaldt temmelig mange gange på min side, til at jeg i dag valgte at undersøge sagen nærmere. Det viser sig så, at det i bund og grund er det velkendte script "Lightbox", der er skyld i denne fejl - dog naturligvis ikke alene. Jeg har én linie, som jeg har sporet frem til, er alt-afgørende mht. denne fejl. Uden denne linie, så kommer fejlen ikke.

Den pågældende linie lyder således:
document.getElementById('holo_display').innerHTML = 'Test..';

Der står naturligvis noget andet end blot "Test.." i den rigtige linie, men det er blot for at illustrere, at selve indeholdet intet har at gøre med fejlen. Uanset hvad jeg skriver i feltet, så kommer fejlen - på nær hvis jeg lader indeholdet var tomt (..innerHTML = '';).

Jeg har naturligvis checket, om id'et stemmer overens med det tilhørende div-element jeg har i min html-kode.

For mig at dømme er det en virkelig besynderlig fejl, eftersom det er scriptet "Lightbox", som kan findes på http://www.lokeshdhakar.com/projects/lightbox2/, der fremkalder denne fejl. Før jeg indsatte en reference til scriptet, virkede alt fint, og det samme gør det, hvis jeg fjerner det igen.

Nogen der har eventuelle forslag til, hvad denne fejl kan skyldes?

- På forhånd tak!
Avatar billede cronick Nybegynder
28. september 2008 - 15:11 #1
Det skal desuden siges, at det kun er Internet Explorer 7.0, der fremkalder denne fejl (muligvis også tidligere versioner) - det virker fint i Firefox, Opera o.l.
Avatar billede olebole Juniormester
28. september 2008 - 15:38 #2
<ole>

Jo, lige netop dén linje kan sagtens være skyld i hele balladen  ;o)

Én ting er, at innerHTML aldrig har været valid - og formodentlig ikke bliver det i min levetid - en anden ting er, at den er svært uhensigstmæssig at bruge. Bla. overskriver den jo det fragment, den bruges på, hvorved alle programmatiske referencer til og fra fragmentet slettes:
    http://www.dengodekode.dk/artikler/DOM/no_innerhtml.php

Desværre er det de sidste par år kommet på mode at skrive JavaScript libraries, byggende på invalide og uhensigtsmæssige koder - f.eks: Prototype, jQuery og Lightbox.

Det er lidt som med kyllingepølse (som jo blot er sammenlimet slagteriaffald): Ingen burde gide at sætte tænderne i det - men ikke desto mindre er der et gigantisk marked for skidtet!  =)

/mvh
</bole>
Avatar billede w13 Novice
28. september 2008 - 16:51 #3
Hvis det nu kun er ren tekst, du skal indsætte i boksen holo_display, bør du gøre sådan i stedet:

document.getElementById('holo_display').firstChild.nodeValue = "tekst";

Du skal så bare lige fra start have &nbsp; stående i holo_display hvis der ikke står noget andet tekst.

Skal du derimod indsætte HTML i holo_display, skal det gøres helt anderledes og på flere linjer.
Avatar billede olebole Juniormester
28. september 2008 - 16:54 #4
- men jeg tror, du bliver nødt til at vise noget kode (og allerhelst et link), for fejlen kan sikkert ligge andre steder, du ikke lige tænker over  =)
Avatar billede cronick Nybegynder
28. september 2008 - 17:09 #5
Nu har jeg kigget lidt på appendChild, som jeg kan forstå, er den rigtige metode til håndtering af elementer, efter at siden er loaded. Jeg var slet ikke klar over, at innerHTML ikke var standard - det gik jeg simpelthen bare ud fra, eftersom stort set alle bruger det - såvel privatpersoner som store websites.

Min linie er oprindeligt som følgende:

document.getElementById('holo_display').innerHTML = '<img src="images/loading.gif" alt="" title="Vent venligst.." border="0" /><div style="text-align: center; padding-top: 3px; color: #878787;">Vent venligst..</div>';

- Det er blot en lille update af et div-element, hvori den fylder det fylder med et midlertidigt load-billede, samt en tilhørende sætning, mens scripet loader et givent billede.
Avatar billede cronick Nybegynder
28. september 2008 - 17:12 #6
Hvis et link ønskes, så er der tale om den følgende side: http://shocknews.dk/habbo/vaerktoej/holo

Bemærk, at i IE7 vil den nogengange komme med fejlen: "Internet Explorer kan ikke..." som jeg nævnte tidligere. Hvis der blot trykkes opdater nogle gange, forsvinder den som regel.
Avatar billede olebole Juniormester
28. september 2008 - 18:35 #7
Det virker sært, for jeg får beskeden (og ikke bare engang imellem), at IE7 ikke kan åbne: "http://shocknews.dk/habbo/vaerktoej/holo."

- men hvor kommer det sidste punktum mon fra? Hvad er filens reelle URL?
Avatar billede cronick Nybegynder
28. september 2008 - 18:44 #8
Ja tak, jeg synes også det virker sært :-)

Jeg går dog ud fra, at det sidste punktum blot er som afslutning på sætningen.

Den rigtige adresse er: http://shocknews.dk/habbo/vaerktoej/holo.php
Avatar billede olebole Juniormester
28. september 2008 - 18:51 #9
Jeg orker ikke at downloade hele koden og give mig til at debugge, men i hvertfald er dette efter min mening en 'ugly cocktail':
    prototype.js + scriptaculous.js + lightbox.js

Jo mere invalid og uhensigtsmæssig kode, man 'stabler ovenpå hindanden', jo mindre sikker kan man være på, hvad der sker  :o|
Avatar billede w13 Novice
28. september 2008 - 19:10 #10
I stedet for:

document.getElementById('holo_display').innerHTML = '<img src="images/loading.gif" alt="" title="Vent venligst.." border="0" /><div style="text-align: center; padding-top: 3px; color: #878787;">Vent venligst..</div>';

får du meget mere ud af, at sætte det ind fra start med HTML, dvs. lægge load-billedet ind i holo_display og så bare skjule holo_display vha. CSS med display:none;

Når den så skal vise, at den loader, så sætter du bare display:block;

:)
Avatar billede cronick Nybegynder
28. september 2008 - 21:42 #11
w13, jeg skal kunne lægge billedet ind i feltet bagefter (når det er loadet). Jeg skal derfor kunne bestemme elementets indhold.

olebole - for at kunne køre scripet "Lightbox", skal alle nævnte javascript-filer være aktive - sågar to mere, kaldet "builder.js" og "effects.js". Ellers vil scriptet simpelthen ikke fungere.
Avatar billede olebole Juniormester
28. september 2008 - 22:45 #12
I know ... :o|
Avatar billede cronick Nybegynder
28. september 2008 - 23:17 #13
Jeg kan selvfølgelig lave det på følgende måde:

  myImage = new Image();
  myImage.src = 'images/loading.gif';
  myImage.title = 'Vent venligst..';
  document.getElementById('holo_display').appendChild(myImage);

  myDiv = document.createElement('div');
  myDiv.setAttribute('text-align', 'center');
  myDiv.setAttribute('padding-top', '3px');
  myDiv.setAttribute('color', '#878787');
  myDiv.appendChild(document.createTextNode('Vent venligst..'));
  document.getElementById('holo_display').appendChild(myDiv);

Det virker bare så anstændigt, og en anelse overflødigt. Det er godt nok samme metode, man benytter i eksempelvis asp.net, når server-side kode skal generere noget lign. (vb.net & C#). Men efter at have været vant til innerHTML, føles det virkelig som en overordenlig tilbagegang. Findes der virkelig ikke en lettere metode, end at skulle lave et element for hver html-kode, man ønsker at tilføje til sit overordnede element?
Avatar billede olebole Juniormester
28. september 2008 - 23:25 #14
- næsten:

  myImage = document.createElement("img");
  myImage.src = 'images/loading.gif';
  myImage.title = 'Vent venligst..';
  document.getElementById('holo_display').appendChild(myImage);

  myDiv = document.createElement('div');
  var css = myDiv.style;
  css.textAlign = 'center';
  css.paddingTop = '3px';
  css.color = '#878787';
  myDiv.appendChild(document.createTextNode('Vent venligst..'));
  document.getElementById('holo_display').appendChild(myDiv);
Avatar billede olebole Juniormester
28. september 2008 - 23:27 #15
- eller:

  myImage = document.createElement("img");
  myImage.setAttribute('src', 'images/loading.gif');
  myImage.setAttribute('title', 'Vent venligst..');
  document.getElementById('holo_display').appendChild(myImage);

  myDiv = document.createElement('div');
  myDiv.className = "css_klasse";
  myDiv.appendChild(document.createTextNode('Vent venligst..'));
  document.getElementById('holo_display').appendChild(myDiv);
Avatar billede olebole Juniormester
28. september 2008 - 23:31 #16
- og det er sådan cirka måden, man runtime opretter kontroller på i de fleste andre miljøer  =)
Avatar billede cronick Nybegynder
29. september 2008 - 13:44 #17
Okay - tak for svarene. Jeg ville ønske, at der havde været en meget lettere metode, som stadigvæk var standard og understøttet af alle browsere - det virker jo så dog ikke til at være tilfældet.

I er velkommen til at lægge et par svar :)
Avatar billede cronick Nybegynder
26. september 2009 - 14:40 #18
Det er godt nok en gammel tråd, men hvis du vil smide et svar olebole, kan vi lige få den lukket :-)
Avatar billede olebole Juniormester
26. september 2009 - 15:00 #19
Det kommer her  ;o)
Avatar billede olebole Juniormester
26. september 2009 - 22:00 #20
Tak for points  =)
Avatar billede cronick Nybegynder
27. september 2009 - 13:29 #21
Det var så lidt. Du har hjulpet mig op til flere gange for et stykke tid siden, så det skal du have tak for :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester