HighDots Forums  

Internet Explorer: PDF-OBJECT-Tag im DOM erstellen

Javascript (German) Programmiersprache JavaScript. (de.comp.lang.javascript)


Discuss Internet Explorer: PDF-OBJECT-Tag im DOM erstellen in the Javascript (German) forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Arnd Ißler
 
Posts: n/a

Default Internet Explorer: PDF-OBJECT-Tag im DOM erstellen - 11-23-2007 , 06:09 AM






Hallo,

ich versuche, über document.createElement(..) ein OBJECT-Element zu
erstellen, welches dann ein PDF laden soll. Der Code funktioniert im
Firefox ganz hervorragend, allerdings nicht im Internet Explorer.

Im IE funktioniert das ganze nur über innerHTML, was ich ich aber nicht
machen möchte, da das object-tag nachher noch einige Handler-Funktionen
angehängt bekommt.

Die Idee:

* Container-Element holen
* Object erstellen
* Als "child" einfügen
* Handler anhängen

Der Code:

function createPdfObject(pstrId, pstrObjId, pstrFileName)
{
var e = document.getElementById(pstrId);
if (e)
{
/*
e.innerHTML = '<object id="' + pstrObjId + '" height=100% width=100%
type="application/pdf" data="' + pstrFileName + '"></object>';
*/

var o = document.createElement('object');
o.style.width = '100%';
o.style.height = '100%';
o.setAttribute('type', 'application/pdf');
o.setAttribute('data', pstrFileName);
o.setAttribute('id', pstrObjId);
e.appendChild(o);
}
}


Weiss jemand Rat?

Beste Grüße,
arnd.

Reply With Quote
  #2  
Old   
Martin Honnen
 
Posts: n/a

Default Re: Internet Explorer: PDF-OBJECT-Tag im DOM erstellen - 11-23-2007 , 07:59 AM






Arnd Ißler wrote:

Quote:
Im IE funktioniert das ganze nur über innerHTML, was ich ich aber nicht
machen möchte, da das object-tag nachher noch einige Handler-Funktionen
angehängt bekommt.

Quote:
Weiss jemand Rat?
Warum kannst du die Handler-Funktionen nicht per innerHTML setzen?

--

Martin Honnen
http://JavaScript.FAQTs.com/


Reply With Quote
  #3  
Old   
Arnd Ißler
 
Posts: n/a

Default Re: Internet Explorer: PDF-OBJECT-Tag im DOM erstellen - 11-23-2007 , 09:08 AM



Quote:
Warum kannst du die Handler-Funktionen nicht per innerHTML setzen?
Weil der eigentliche Handler ein JS-Objekt ist - ist leider ne Vorgabe.
Hier ein Beispiel:

TargetObject.messageHandler =
{
onMessage: function(aMessage)
{
/* do something */
return true;
},
onError: function(error, aMessage)
{
console.error(error);
console.log(aMessage);
}
};


Oder kann man das irgendwie in innerHTML packen? Ich wüsste leider nicht
wie

Grüße,
arnd.


Reply With Quote
  #4  
Old   
Martin Honnen
 
Posts: n/a

Default Re: Internet Explorer: PDF-OBJECT-Tag im DOM erstellen - 11-23-2007 , 09:13 AM



Arnd Ißler wrote:

Quote:
Hier ein Beispiel:

TargetObject.messageHandler =
{
onMessage: function(aMessage)
{
/* do something */
return true;
},
onError: function(error, aMessage)
{
console.error(error);
console.log(aMessage);
}
};


Oder kann man das irgendwie in innerHTML packen?
Wie benutzt du denn obiges zur Zeit?


--

Martin Honnen
http://JavaScript.FAQTs.com/


Reply With Quote
  #5  
Old   
Arnd Ißler
 
Posts: n/a

Default Re: Internet Explorer: PDF-OBJECT-Tag im DOM erstellen - 11-26-2007 , 08:43 AM



Quote:
Wie benutzt du denn obiges zur Zeit?
Hmm, recht umständlich:

Nach einem Timeout wird das Object (per getElementById) gesucht, dann
wird der entsprechende Handler drangehängt. Problematisch dabei ist,
dass wenn das Object das PDF, was dort hineingeladen wird, noch nicht
aus dem Netz komplett heruntergeladen wurde, der Handler nicht eingefügt
werden kann.

Am charmantesten wäre ja sowas wie ein onLoad in dem Object-Tag, aber
das gibt es IMHO ja nicht, oder?

Grüße,
arnd.


Reply With Quote
  #6  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Internet Explorer: PDF-OBJECT-Tag im DOM erstellen - 11-26-2007 , 02:53 PM



Arnd Ißler wrote:
Quote:
[Martin Honnen wrote: ]
Wie benutzt du denn obiges zur Zeit?

Hmm, recht umständlich:

Nach einem Timeout wird das Object (per getElementById) gesucht, dann
wird der entsprechende Handler drangehängt. Problematisch dabei ist,
dass wenn das Object das PDF, was dort hineingeladen wird, noch nicht
aus dem Netz komplett heruntergeladen wurde, der Handler nicht eingefügt
werden kann.

Am charmantesten wäre ja sowas wie ein onLoad in dem Object-Tag, aber
das gibt es IMHO ja nicht, oder?
Das object-_Element_ hat kein onload-Attribut, aber das load-Event ist auf
HTMLObjectElement-Objekte anwendbar:

http://www.w3.org/TR/html401/struct/...ml#edef-OBJECT
http://www.w3.org/TR/DOM-Level-2-HTM...tml#ID-9893177
http://www.w3.org/TR/DOM-Level-2-Eve...ngs-htmlevents
http://www.w3.org/TR/DOM-Level-3-Events/events.html

Der Grund dafür, dass es bei Dir im IE mit D::createElement() nicht
funktioniert, ist jedoch wahrscheinlich, dass Du versuchst, das
type-Attribut zu setzen. Dann wird in meinem IE 7.0.5730.11 folgende
Exception geworfen:

name: Error
number: -2147467262
description: Schnittstelle nicht unterstützt
message: Schnittstelle nicht unterstützt

Lasse ich diese Anweisung weg, funktioniert es bei mir zumindest soweit,
dass das anscheinend defekte Foxit-Reader-Plugin geladen wird und dabei
abstürzt.

Ausserdem solltest Du setAttribute() sparsam verwenden; es ist bekannt,
dass Implementationen dieser Methode fehlerhaft sind. Das Objekt hat
Eigenschaften (s.o.), an die Du stattdessen zuweisen kannst:

o.data = "http://localhost/doc/JavaScript/ECMAScript/ECMA-327.pdf";

Das ist auch etwas effizienter als der Methodenaufruf.


PointedEars

P.S.
Das nächste Mal bitte eine Einleitungszeile mitliefern:
<http://lernst.de/zitieren/kriegst.de/antworten> Danke.
--
Quote:
Ich habe mir bereits mehrere Mausverfolger aus dem Netz heruntergeladen.
Bei uns laufen genug Katzen rum, da muß ich mir keinen Mausverfolger
runterladen...
(Georg Maaß in dcljs <b7mnk1$2iafr$2 (AT) ID-3551 (DOT) news.dfncis.de>)


Reply With Quote
  #7  
Old   
Arnd Ißler
 
Posts: n/a

Default Re: Internet Explorer: PDF-OBJECT-Tag im DOM erstellen - 11-28-2007 , 05:26 AM



Mit einem

var o = document.createElement('object');
o.addEventListener('load', doOnLoad, false);

sollte es im FF gehen, dort wird "doOnLoad" aber nicht ausgeführt.


Quote:
Der Grund dafür, dass es bei Dir im IE mit D::createElement() nicht
funktioniert, ist jedoch wahrscheinlich, dass Du versuchst, das
type-Attribut zu setzen. Dann wird in meinem IE 7.0.5730.11 folgende
Exception geworfen:

name: Error
number: -2147467262
description: Schnittstelle nicht unterstützt
message: Schnittstelle nicht unterstützt
Super, vielen Dank, das klappt jetzt Allerings bleibt die
onLoad-Problematik des Event-Handlers. Im IE sollte das gleiche wie oben
beschrieben ja mit o.attachEvent('load', doOnLoad); gehen - leider ist
das nicht der Fall.


Quote:
P.S.
Das nächste Mal bitte eine Einleitungszeile mitliefern:
http://lernst.de/zitieren/kriegst.de/antworten> Danke.
War es zu wenig zitiert?

Grüße,
a.


Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.