Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

loading js code with xmlhttp working (but..)

20 views
Skip to first unread message

warteschlange

unread,
Jul 17, 2005, 4:34:36 AM7/17/05
to
i want to postload javscript from another javascript.
This works fine in
firefox and IE6
for macIE i can use an Iframe to load the code and inject it with
insertAdjacentHTML
The problems arise with safari and opera.
both load the new code with XMLHttpRequest, but the code is no
'executable'
To make this possible on IE i had to use the magic 'DEFER' attribute.

(Sync or Async ist not the issue)

This is a extract of the working code:
[code]
//----------------
function importJS(url){
var script = syncGetFile(url);
document.body.insertAdjacentHTML("beforeEnd",
"<span>&nbsp;</span><SCRIPT DEFER>" + script + "</SCRIPT>");
}

//----------------
function syncGetFile(url){
var xmlhttp = _XMLHttpRequest_init();
xmlhttp.open("GET", url, false);
xmlhttp.send(null);
return xmlhttp.responseText;
}
function _XMLHttpRequest_init() {
....
}
if(typeof HTMLElement!="undefined" && !
HTMLElement.prototype.insertAdjacentElement){
HTMLElement.prototype.insertAdjacentHTML = function (sWhere, sHTML) {
}
}
[/code]
for testing try to insert "var str = 'function a(){alert(1)}'; with
insertAdjacent or another way
and call the function afterwards.

i'm stuck now.

opera and safari experts needed...
Andres

commercial

unread,
Jul 17, 2005, 5:30:18 AM7/17/05
to
If your problem is conditional script content because of

different agents, use comment syntax like

<!-- [if >IE5 ..] -->


-------------------

If you don't understand "remote scripting",
aka xmlHttp, study hard and find out.

--------------------

hundreds of thousands of people died in my lifetime
(outside US borders) for US one way street thinking.


See now, what your kind did to humans.

Chimpanses have 6 genes different from those of humans
of some 35.000 genes total. And your post just shows that.


"warteschlange" <and...@holzapfel.ch> wrote in message
news:1121589276....@g49g2000cwa.googlegroups.com...

Martin Honnen

unread,
Jul 17, 2005, 8:20:08 AM7/17/05
to

warteschlange wrote:

> i want to postload javscript from another javascript.
> This works fine in
> firefox and IE6
> for macIE i can use an Iframe to load the code and inject it with
> insertAdjacentHTML
> The problems arise with safari and opera.
> both load the new code with XMLHttpRequest, but the code is no
> 'executable'

With recent Opera (8.x, perhaps 7.5x) it should be possible to simply
create a new script element object and insert it into the page without
using any XMLHttpRequest e.g.

var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'test2005071701.js';
document.getElementsByTagName('head')[0].appendChild(script);

That also works with IE/Win and with Mozilla but you should note that
the script file might be loaded asynchronously so don't expect to be
able to call functions in the JavaScript file directly after the
appendChild call.


--

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

warteschlange

unread,
Jul 17, 2005, 9:10:30 AM7/17/05
to
thanks,
i will try Opera 8.
I'm completely aware of the sync / async problem.

So there remains Safari as a problem.
I'm sure, that sooner or later Safari will allow your mentioned method,
but until then some hacking is needed.

(I guess, it is the same with the opacity - you have to convice the
progammers, that it is not relevant how useful that 'gadget' is, what
really matters is compability)

One aproach to make it work with safari, was loading the new jssrc and
using eval (arghhh...) - Works, but functions must be defined this
way:
window.funcName = function(...){...}, to be callable from the origin
code.

Again thanks
and hoping for a Safari expert

warteschlange

unread,
Jul 22, 2005, 2:12:20 PM7/22/05
to
I noticed one disadvatage of your method to use

var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'test2005071701.js';
instead of httpRequest:
you see in the statusbar an information, that a reload is goin on...
Having a timer for requesting data every few seconds this is
unfortunately not very elegant!

Randy Webb

unread,
Jul 22, 2005, 5:14:38 PM7/22/05
to
warteschlange said the following on 7/22/2005 2:12 PM:

It is still a better alternative than an HTTPRequest that has limited
support though, isn't it? createElement is supported in more browsers
than HTTPRequest is. Possibly using a test for HTTPRequest support and a
final section that attempts to use createElement and possibly two other
ways to dynamically load a .js file.

--
Randy
comp.lang.javascript FAQ - http://jibbering.com/faq & newsgroup weekly

0 new messages