Attempting nested javascript include

B

Brit

Hello,
I have been trying to include a js file from within another js file. I
can get this to work for firefox, but not i.e.

What I have is
a.html ...
<script language='JavaScript'
src='b.js'></script><script>Function();</script>
b.js ....
function Function() {
var s1 = "";
document.write("<sc" + s1+ "ript language='JavaScript'
src='c.js'></sc" + s1 + "ript>");
document.write("<sc" + s1+ "ript language='JavaScript'>Func2();</sc" +

s1 + "ript>");
}
and then c.js
I tried the s1="" from another googled post - no joy.
if I change a.html to
<script language='JavaScript' src='cb.js'></script>
<script language='JavaScript'
src='b.js'></script><script>Function();</script>
it works.

Is anyone able to get this to work with IE 6?

Thanks - Bryan.
 
V

Vic Sowers

Brit said:
Hello,
I have been trying to include a js file from within another js file. I
can get this to work for firefox, but not i.e.

What I have is
a.html ...
<script language='JavaScript'
src='b.js'></script><script>Function();</script>
b.js ....
function Function() {
var s1 = "";
document.write("<sc" + s1+ "ript language='JavaScript'
src='c.js'></sc" + s1 + "ript>");
document.write("<sc" + s1+ "ript language='JavaScript'>Func2();</sc" +

s1 + "ript>");
}
and then c.js
I tried the s1="" from another googled post - no joy.
if I change a.html to
<script language='JavaScript' src='cb.js'></script>
<script language='JavaScript'
src='b.js'></script><script>Function();</script>
it works.

Is anyone able to get this to work with IE 6?

Thanks - Bryan.

Here's what I use (I have this in a 'util.js' file that I load 'manually'
(with a <script src=...> element):
====================
var Included={};
function Include() {
var src, url, heads;
heads = document.getElementsByTagName("head");
if (heads.length==0) {throw new Error(0x8009000,"Include: No <head> tag
exists. Scripts not loaded.");}
url = document.URLUnencoded;
for (a=0; a<arguments.length; a++) {
src = arguments[a];
if (Included[src]) continue;
Included[src] = true;
if (url.substr(0,5)=="file:") {
if (src.charAt(0)=="/") src = "C:<your webroot directory full path>"+src;
else src = url.slice(7,url.lastIndexOf("\\")+1)+src;
}
heads[0].appendChild(document.createElement("<script language='JavaScript'
src='"+src+"' />"));
}
}
====================
Then in the '<head>' I put:

<script
language="javascript">Include("/_ScriptLibrary/MyScript.js","LocalScripts.js",...)</script>

You may also use Include() in other 'Included' or manually loaded script
files, but may not reference their contents until the parent file is fully
loaded.

This works fine in IE6 but is untested in any other enviromant.
 
L

Lasse Reichstein Nielsen

Brit said:
I have been trying to include a js file from within another js file. I
can get this to work for firefox, but not i.e.

*how* does it not work in IE? Does it give an error message? Do you
have Javascript error messages enabled?
<script language='JavaScript'
src='b.js'></script>

Should be
<script type="text/javascript" src="b.js"></script>
The "type" attribute is mandatory, and the language attribute is
deprecated and not needed.
<script>Function();</script>
....

function Function() {

*Bad* name for a function. There is already a built-in function called
Function.
var s1 = "";
document.write("<sc" + s1+ "ript language='JavaScript'
src='c.js'></sc" + s1 + "ript>");

No need for being this convoluted. Just write:
document.write("<script type='text/javascript' src='c.js'></script>");

Since this is inside a javascript file, and not inside an HTML file,
there is no need to escape anything.

If this had been inside a script tag in an HTML file, all you need to do
is change all "</" to "<\/", i.e.,
document.write("<script type='text/javascript' src='c.js'><\/script>");

Your attempt at escaping by putting "s1" in the middle would still
fail in a fully standards compliant HTML parser, because such one
would end the script tag at the first occurence of "</". Actual
browsers only end it at "</script", but there is no need to take
chances when being correct is so easy.
document.write("<sc" + s1+ "ript language='JavaScript'>Func2();</sc" +

s1 + "ript>");
}
and then c.js

.... defining Func2, I guess.
I tried the s1="" from another googled post - no joy.

And no need.
if I change a.html to
<script language='JavaScript' src='cb.js'></script>
<script language='JavaScript'
src='b.js'></script><script>Function();</script>
it works.

Is anyone able to get this to work with IE 6?

Again, what error message does it give you?

/L
 
B

Brit

Thanks for the response. I stripped down the code and renamed the
functions - supposedly for clarity.

Anyway, I tried with the added type field, however that didn't make any
difference here. The error I get is 'Object Expected' with a code of 0.
The line it points to is the call to the function in b.js. If I remove
the call to Func2 in b.js, it works fine. If I replace the call to
Func2 in b.js, but include c.js in a.html it works. This is what I've
done for now - but it's annoying that it doesn't work with just
including b.js and calling Function.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,780
Messages
2,569,611
Members
45,280
Latest member
BGBBrock56

Latest Threads

Top