我有这个外部方法,它会根据有效的屏幕大小加载正确的CSS文件。当我添加更多文件夹/页面时,我意识到我需要在调用它时指定多少个文件夹,这样才能找到CSS文件。它适用于一个文件夹深的页面,它只有一行文本以确保它被加载。当我尝试加载包含图片和内容的索引页面时,它会加载除CSS文件之外的所有内容" ReferenceError:Start未定义"。为什么没有定义?请严格按照javascript保留所有解决方案,我不想在这个项目中使用jQuery。
以下是头标记中的HTML
<script src="../Scripts/Load_CSS_Template.js"></script>
<script>Start(0);</script>
这是外部javascript
function Start(Folders_Deep)
{
if (Folders_Deep == "undefined")
{
console.log("I was not defined");
}
else
{
var Prefix = "";
if(Folders_Deep == 1)
{
Prefix = "../";
}
console.log("Browser Screen Width: " + window.innerWidth);
console.log("Hostname: " + window.location.hostname);
console.log("Folders_Deep: " + Folders_Deep);
console.log("Prefix: " + Prefix);
if (window.innerWidth <= '1400')
{
Get_CSS_File(Prefix + 'Mobile_Template.css');
}
else
{
Get_CSS_File(Prefix + 'Desktop_Template.css');
}
}
}
答案 0 :(得分:1)
如果您的CSS文件始终位于根目录中且JavaScript始终位于/Scripts
目录中,则您不需要任何前缀,只需使用完整路径/Scripts/Load_CSS_Template.js
,/Mobile_Template.css
和/Desktop_Template.css
。否则,请使用window.location
找出您所在的位置并采取相应行动。
function Start(Folders_Deep) {
var Prefix = "";
if (undefined === Folders_Deep) {
console.log("I was not defined");
} else {
if (Folders_Deep == 1) {
Prefix = "../";
} else if (Folders_Deep == 0) {
Prefix = "./";
}
console.log("Browser Screen Width: " + window.innerWidth);
console.log("Hostname: " + window.location.href);
console.log("Folders_Deep: " + Folders_Deep);
console.log("Prefix: " + Prefix);
if (window.innerWidth <= '1400') {
Get_CSS_File(Prefix + 'Mobile_Template.css');
} else {
Get_CSS_File(Prefix + 'Desktop_Template.css');
}
}
}
答案 1 :(得分:1)
确定。试试这个。
将其添加到html文件中的<head>
部分:
<script type="text/javascript">
function getScript(src, callback) {
var s = document.createElement('script');
s.src = src;
s.async = true;
s.onreadystatechange = s.onload = function() {
if (!callback.done && (!s.readyState || /loaded|complete/.test(s.readyState))) {
callback.done = true;
callback();
}
};
document.querySelector('head').appendChild(s);
}
function myCallback() { Start(0); }
getScript("../Scripts/Load_CSS_Template.js", myCallback);
</script>
答案 2 :(得分:0)
如果您只想在加载文件时执行该函数(不考虑加载其他文件和对象),您只需将Start(0)调用放在Load_CSS_Template.js中的函数下面
即
function Start(Folders_Deep)
{
if (Folders_Deep == "undefined")
{
console.log("I was not defined");
}
else
{
var Prefix = "";
if(Folders_Deep == 1)
{
Prefix = "../";
}
console.log("Browser Screen Width: " + window.innerWidth);
console.log("Hostname: " + window.location.hostname);
console.log("Folders_Deep: " + Folders_Deep);
console.log("Prefix: " + Prefix);
if (window.innerWidth <= '1400')
{
Get_CSS_File(Prefix + 'Mobile_Template.css');
}
else
{
Get_CSS_File(Prefix + 'Desktop_Template.css');
}
}
}
Start(0);
-------------------- [ALTERNATIVE SOLUTION] -----------------------
相反,将Start(0)
放在<body onLoad="">
中,一旦加载完毕,它就会被执行。 (让脚本按原样加载到html <head>
部分。)
即
<body onLoad="Start(0)">Hello World</body>
答案 3 :(得分:0)
在加载js文件的调用中是../。我忘了我从文件夹里面的页面复制并粘贴了。一旦我删除它,它加载了脚本。