В nwjs DOM кажется пустым при доступе из другого модуля - PullRequest
0 голосов
/ 29 июня 2019

Я хочу использовать модули в моем приложении nwjs, которые используют document, но кажется, что они не могут должным образом получить доступ к DOM главной страницы.Ниже вы можете найти простой тест, который показывает проблему.

У меня есть следующие файлы:

package.json

...
"main": "index.html"
...

index.html

<html>
  <head>
    <meta charset="utf-8" />
    <title>test</title>
  </head>
  <body>
    <div id="container_model_view" class="brd"></div>
    <script>let exports = {};</script>
    <script src="./main.js"></script>
  </body>
</html>

main.ts (скомпилировано в main.js перед запуском)

import {getEl} from './mod_test';
console.log(document.getElementById("container_model_view"));
console.log(getEl());

mod_test.ts

export function getEl() {
    return document.getElementById("container_model_view");
}

Вывод:

div#container_model_view.brd    //access from main.ts - ok
null                //access from mod_test.ts - fail

Я обнаружил, чтоЯ могу связать мой main.js с накопительным пакетом или веб-пакетом, и тогда он будет работать, потому что основной модуль и модуль 'mod_test' объединены в один файл.Но мне не нравится такой подход, так как я боюсь, что это повлияет на производительность, не говоря уже о том, что это кажется действительно ненужным дополнительным шагом при сборке.

1 Ответ

0 голосов
/ 01 июля 2019

Как оказалось, document, указывающая на главную страницу приложения, существует только в контексте браузера. require() загружает модули в контексте узла. По-видимому, нет способа указать, в каком контексте вы хотите загрузить свой модуль, он всегда будет узлом. Некоторые способы оставаться в контексте браузера при загрузке модуля описаны в документах следующим образом:

Скрипты, загружаемые или внедряемые традиционными веб-способами, такими как использование <script> элемент или jQuery $.getScript() или RequireJS, запущены в контексте браузера.

К сожалению, я не смог найти способ использовать что-либо из перечисленного выше с машинописью.

...