Импорт JS из тега скрипта в HTML-файл. Возможный? - PullRequest
1 голос
/ 30 мая 2019

Я хочу получить доступ к данным из тега script в html-файле, создаваемом cms. Можно ли сделать это, не загрязняя глобальное пространство имен? Я пытался использовать модули es6, но мне это не удалось, и я не смог найти информацию об этом.

    <script>
        let list = ['a','b','c'];
        export default list
    </script>
    //test.js
    import list from './index.html' 

Ошибка: 'http://localhost:8080/index.html net :: ERR_ABORTED 404' или же: «Не удалось загрузить скрипт модуля: сервер ответил не MIME-типом« JavaScript / HTML ». Строгая проверка типов MIME применяется для скриптов модулей в соответствии со спецификацией HTML. '

Ответы [ 2 ]

3 голосов
/ 30 мая 2019

Нет, это еще не оговорено в спецификации HTML¹ (и я подозреваю, что никогда не будет ²).(Если бы это было так, вам все равно понадобилось бы type="module" в вашем первом теге скрипта.) Не существует спецификатора модуля , который бы указывал элемент скрипта на странице HTML.На данный момент единственными спецификаторами модуля являются URL для файлов JavaScript. Подробности в спецификации .

Вместо этого вы, вероятно, захотите что-то вроде этого:

<script type="module">
import { setList } from "./test.js";
setList(['a', 'b', 'c']);
</script>

... где test.js экспортирует именованный экспорт, который позволяет вам сообщитьэто какой список использовать.

(или, конечно, это может быть экспорт по умолчанию.)

Встроенные script type="module" теги могут import, но пока они могут использовать export,ничто не может использовать экспорт, который они создают, потому что у них нет полезного спецификатора модуля.


¹ Это спецификация HTML, потому что форма и семантика спецификаторов модуля оставлены на хостсреда по спецификации JavaScript (подробности здесь ).Все, что спецификация JavaScript говорит о них, это то, что они являются строковыми литералами.

² Это, конечно, может быть, например, с использованием идентификаторов фрагментов.Но благодаря мультиплексированию HTTP / 2, делающему загрузку дискретных ресурсов настолько быстрым по сравнению с HTTP / 1.1 (и особенно против HTTP / 1.0), стимул сделать все, что содержится в одном ресурсе, теперь значительно ниже, чем это было несколько лет назад.

0 голосов
/ 30 мая 2019

Вы не можете экспортировать JS из HTML.Однако вы можете импортировать его, используя атрибут type="module" в теге <script>:

<script type="module">
  import list from "./test.js";
  //Use list
</script>
...