Запустить JavaScript внутри тегов <script src = "..."> </ script>?

javascript html

8472 просмотра

5 ответа

1100 Репутация автора

У меня есть файл JavaScript, который обрабатывает вкладки переключателей. Вот источник:

var tCount = 0;

function SwitchToTab(id) {
    if (id < 0 || id > tCount) { id = 0; }

    for (var i = 0; i < tCount; i++) { document.getElementById("tab" + i).className = ""; }
    document.getElementById("tab" + id).className = "active";

    for (var i = 0; i < tCount; i++) { document.getElementById("area" + i).style.display = "none"; }
    document.getElementById("area" + id).style.display = "";
}

function InitializeTabs(initialTabId, tabsCount) {
    tCount = tabsCount;
    SwitchToTab(initialTabId);
}

Я пытаюсь сделать это как можно короче, вот так:

<script src="Resources/Tabs.js">InitializeTabs(0, 4);</script>

Это не работает, но работает, если я разделяю их так:

<script src="Resources/Tabs.js"></script>
<script>InitializeTabs(0, 4);</script>

Итак, есть ли способ запустить JavaScript внутри <script src="..."></script>тегов? Чего мне не хватает?

Автор: MFatihMAR Источник Размещён: 02.04.2015 01:21

Ответы (5)


0 плюса

12672 Репутация автора

Вы можете использовать srcили поместить JavaScript внутри тега.

Но не оба сразу. В любом случае, нет никаких недостатков в использовании двух тегов (кроме большого размера файла).

Автор: MightyPork Размещён: 02.04.2015 01:23

0 плюса

863 Репутация автора

Вы должны сделать это вторым способом. если <script src="Resources/Tabs.js">InitializeTabs(0, 4);</script>вы ссылаетесь на внешний файл javascript, ваш встроенный код должен перейти во второй блок сценария.

Автор: what is sleep Размещён: 02.04.2015 01:23

8 плюса

17651 Репутация автора

Решение

Нет, это невозможно. Спецификация html диктует, что <script>тег делает один или другой.

W3 школы , акцент мой.

Элемент либо содержит операторы сценариев, либо указывает на внешний файл сценария через атрибут src.

Примечание: если присутствует атрибут "src", элемент должен быть пустым.

<script>Тэг Html Spec , акцент мой.

Сценарий может быть определен в содержимом элемента SCRIPT или во внешнем файле. Если атрибут src не установлен, пользовательские агенты должны интерпретировать содержимое элемента как сценарий. Если src имеет значение URI, пользовательские агенты должны игнорировать содержимое элемента и извлекать сценарий через URI.

Автор: DLeh Размещён: 02.04.2015 01:24

0 плюса

2485 Репутация автора

Когда вы включаете <script src="Resources/Tabs.js"></script>, вы упоминаете, что хотите использовать Javascript, который включен в Tabs.jsфайл, чтобы компилятор знал, где искать InitializeTabsфункцию, когда он пытается выполнить функцию.

Теперь, если вы хотите включить встроенный Javascript, который находится внутри HTML, тогда вы используете <script>... JAVASCRIPT HERE .... </script>

Вы должны сделать это так

<script src="Resources/Tabs.js"></script>
<script>InitializeTabs(0, 4);</script>
Автор: Saagar Elias Jacky Размещён: 02.04.2015 01:27

0 плюса

4925 Репутация автора

Вы не можете поместить javascript в <script src="...теги, но вы можете запустить файл JavaScript, который анализирует HTML, ищет <script srcтеги, которые преобразуют его в два тега.

Например,

<script src="Resources/Tabs.js">InitializeTabs(0, 4);</script>

должен быть преобразован в

<script src="Resources/Tabs.js"></script>
<script>InitializeTabs(0, 4);</script>

Вот код, который я попробовал:

var tags = document.querySelectorAll("script[src]");
[].forEach.call(tags, function(elem){
  var text = elem.innerText;
  var src  = elem.src;
  var parent = elem.parentNode;
  parent.removeChild(elem);
  var newTag = document.createElement('script');
  newTag.setAttribute('src', src);
  parent.appendChild(newTag);
  var newTag = document.createElement('script');
  var t = document.createTextNode(text);
  newTag.appendChild(t);
  parent.appendChild(newTag);
});

в JSFiddle

Автор: theonlygusti Размещён: 02.04.2015 01:49
Вопросы из категории :
32x32