2015-12-09 4 views
0

У меня есть этот внешний метод, который загрузит правильный файл CSS в зависимости от размера экрана, который работает. Когда я добавил больше папок/страниц, я понял, что мне нужно указать, сколько папок сильно, когда я вызываю его, чтобы он мог найти файлы CSS. Он работает на страницах с одной папкой, в которой есть только одна строка текста, чтобы убедиться, что она загружена. Когда я пытаюсь загрузить страницу индекса, на которой есть картинки и материал, она загружает все, кроме файла CSS, в котором говорится: «ReferenceError: Start не определен». Почему это не определено? Пожалуйста, держите все решения строго в javascript, я не хочу использовать jQuery для этого проекта.Почему мой внешний метод javascript говорит, что он не определен?

Вот 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

Ваш пример не является действительным HTML. Где находится JavaScript, который вы включили в свой пример на самом деле? –

+0

У меня есть только вызов в заголовке – Peavey2787

+2

Загружен ли файл сценария? Вы проверили вкладку «Сеть» инструментов F12, чтобы убедиться, что вы не получаете 404? – DaveB

ответ

0

Это был ../ в вызове для загрузки js-файла. Я забыл, что я скопировал и вставил со страницы, находящейся внутри папки. Как только я удалил, он загрузил скрипт.

+1

Это должно было вызвать ошибку 404, когда она пыталась загрузить JS-файл. Вы сказали, что ошибок в консоли не было. – Barmar

+0

Не было ошибок 404, только «ReferenceError: Пуск не определен» в консоли. – Peavey2787

+0

Если при попытке загрузить файл не было ошибок, вы должны иметь другое 'Load_CSS_Template.js' в неправильном месте, но оно не определяет' Start'. – Barmar

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); 

-------------------- [АЛЬТЕРНАТИВНОЕ РЕШЕНИЕ] ------------------- ----

Вместо этого поставьте Start(0) в <body onLoad=""> и он будет выполнен, как только все будет загружено. (Оставьте загрузку сценария как есть в разделе html <head>.)

I.e.

<body onLoad="Start(0)">Hello World</body> 
+0

Аргумент 'Start()' зависит от того, где находится вызывающая страница, поэтому вы не можете жестко записать его в скрипте. – Barmar

+0

Но тогда он всегда будет загружаться без префикса. Это не помогает, когда я нахожусь на странице, находящейся внутри папки. Например, у меня есть папка проекта и файл myproject.html. Когда я нахожусь на этой странице, мне нужно начать с 1 в качестве переменной. – Peavey2787

+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'); 
     } 
    } 
} 
+0

Если я попробую, это не сработает, когда я нахожусь на странице внутри папки. У меня есть папка «Проекты» и страница с именем myprojects.html. Если на этой странице он не загружается /Desktop_Template.css, то он заходит в Project/Desktop_Template.css – Peavey2787

+1

Вы уверены, что используете '/' в начале пути, а не '. /'? Корень '/' всегда является корнем страницы 'example.com /', поэтому '/ foobar' распространяется на' example.com/foobar' независимо от того, где вы находитесь в 'example.com /'. – deamentiaemundi

+0

Я просто дважды проверял, и он не работает. – Peavey2787

1

Хорошо. Попробуйте это вместо этого.

Добавить это в разделе <head> в вашем HTML файле:

<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> 
Смежные вопросы