【问题标题】:Electron page navigation: Loading content and attached javascript电子页面导航:加载内容和附加的 javascript
【发布时间】:2021-01-07 11:28:36
【问题描述】:

我正在尝试在电子中创建一个基本的页面导航。

electron api demo 中,导入用于此目的(据我所知)。关于导入,我发现它已弃用的信息是 2020 年 2 月来自 Chrome 的 removed
作为替代方案,可以使用 Node-module fs。 我的问题:脚本没有加载。

将内容和附加的 javascript 加载到 div 中的最佳方式是什么?

Github Code:

感谢@Entertain,问题得以解决。我已经更新了 Git-Repo。

【问题讨论】:

  • 你能在 loadPage 函数中打印 scripts[i].innerText 并检查输出吗?
  • 这部分被忽略。 。第二个脚本标签内的所有内容都会被打印出来。
  • 好问题兄弟
  • 为什么你的 home.html 还包含 标签?如果将其加载到 index.html 中,您将有两个无效的 标签。
  • 为了进一步帮助你,一些用于调查的 github repo 会有所帮助

标签: javascript html node.js electron fs


【解决方案1】:

好的,首先,我们正在使用动态 DOM 元素。这意味着 addEventListener 会被评估一次,并且在您将新元素动态添加到 DOM 之后,它将不会被应用。 winController.js 中的这种解决方法将有所帮助:

// Hello.addEventListener("click", function () {
//   loadPage("./assets/html/Hello.html", "content");
// });

// Info.addEventListener("click", function () {
//   loadPage("./assets/html/Info.html", "content");
// });

// This implementation doesn't care whether an element with the given id exists
document.addEventListener('click', function (e) {
  if (e.target && e.target.id == 'Hello') {
    loadPage('./assets/html/Hello.html', 'content');
  } else if (e.target && e.target.id == 'Info') {
    loadPage('./assets/html/Info.html', 'content');
  }
});

接下来删除functions.js 文件中的export,不需要它:

function thanks() {
  alert('Thanks');
}

唯一剩下的,也是最重要的,就是更新我们如何动态加载functions.js 文件:

<!-- <script type="module" src="../js/functions.js"></script> -->
<script type="module">
  let script = document.createElement('script');
  script.src = './assets/js/functions.js';
  document.head.append(script);
  
  // function thanks() {
  //     alert("Thanks");
  //   }
  Say.addEventListener('click', function () {
    thanks();
  });
</script>

就是这样,在此更改后,您的警报应该会触发!

编辑:请将您的Hello.Html 重命名为Hello.html,或者以后最好将所有内容都写成小写以防止进一步的错误:hello.htmlinfo.html

注意:在您的 Info.html 文件中,您的按钮 ID 错误:

<!-- <button type="submit" class="btn btn-success btn-lg mt-2" id="Info"> -->
<button type="submit" class="btn btn-success btn-lg mt-2" id="Hello">
  Jump to Hello
</button>

【讨论】:

  • 好吧,首先为什么在你的例子中加载 winController.js 两次?为什么不只把它留在 index.html 中?
  • 关于模块脚本你是对的,但这里你使用了 eval() 函数来评估
  • 感谢您的提示。我已将 home.html 限制在最低限度。关于 WinController:如果 WinController 不再包含,它似乎在 div 中不存在(我会更新我的问题)
  • 嘿,非常感谢您的回答。这里不应该也可以导入吗? async function load() {let say = await import("../js/functions.js"); } load(); 你能给我一个提示,我可以在哪里获得有关动态 DOM 和你编写的函数的更多信息?
猜你喜欢
  • 2020-05-20
  • 2011-10-14
  • 1970-01-01
  • 1970-01-01
  • 2011-12-09
  • 2013-12-30
  • 2019-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多