如何使用 fetch api 及其 javascript 加载 html 页面?

2024-04-08

我正在尝试使用 fetch API 加载 HTML 页面及其 JavaScript 脚本

我可以使用 ajax 和 JQuerySee here https://stackoverflow.com/questions/50847274/fetch-api-not-getting-full-html-page加载页面,但是可以使用 fetch API 吗?

这是代码演示:

我假设你在本地主机上运行这个

<!-- index.html -->
<!DOCTYPE html>
<html>
<head>
    <title>fetch API</title>
</head>
<body>
    <p>index page</p>
    <div id="content">

    </div>

<script>
    fetch('./page.html')
        .then(data => data.text())
        .then(html => document.getElementById('content').innerHTML = html);
</script>
</body>
</html>

要加载的页面:

<!-- page.html -->
<p> i am the loaded page</p>
<script type="text/javascript">
    alert("Javascript is working");
</script>

The <p> tag I am the loaded page将会运行,但是<script> wont alert或任何类型的 JavaScript


我发现使用 eval() 的其他答案在这里很有帮助,但遇到了一个问题,因为我的动态加载内容正在导入一个外部脚本,在 Firefox 中给出 CORS 警告,例如:

<script src="https://cdn.jsdelivr.net/npm/[email protected] /cdn-cgi/l/email-protection"></script>

因此,我对其进行了一些调整,以在不使用 eval() 的情况下注入脚本标签,以允许来自其他域的外部脚本以及嵌入式脚本。然后,我修改为按照定义的顺序加载脚本,等待加载完成后再加载下一个 - 这是因为我的页面上的嵌入式脚本依赖于正在加载的外部脚本的功能。

fetch("/mypage.html").then(response => {
    return response.text();
}).then(data => {

    const app = document.getElementById("app");
    app.innerHTML = data;

    // Load scripts in the order they are defined
    // Note that inserting scripts into an element using innerHTML doesnt work - hence this logic
    var scripts = app.querySelectorAll("script");

    if (scripts !== null && scripts.length > 0) {
        var loadScript = index => {
            if (index < scripts.length) {
                var newScript = document.createElement("script");

                if (scripts[index].innerText) {
                    var inlineScript = document.createTextNode(scripts[index].innerText);
                    newScript.appendChild(inlineScript);
                }
                else {
                    newScript.src = scripts[index].src;
                }
                scripts[index].parentNode.removeChild(scripts[index]);
                newScript.addEventListener("load", event => loadScript(index + 1));
                newScript.addEventListener("error", event => loadScript(index + 1));
                app.appendChild(newScript);
            }
        }

        loadScript(0); // Start loading script 0. Function is recursive to load the next script after the current one has finished downloading.
    }
}).catch(err => {
    console.warn('Something went wrong.', err);
});  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 fetch api 及其 javascript 加载 html 页面? 的相关文章

  • iPad - 无法在框架内滚动

    我无法滚动 iPad Safari 中框架内调用的 pdf 我已经尝试过两件事 2 指滚动 使用对象 嵌入代替框架 但这是行不通的 事实上我已经尝试了很多东西 溢出 高度等等 请帮我 先感谢您 根据这篇文章http support appl
  • 我如何使用 querySelector() 选择具有双类的元素

    当我想使用 querySelector 选择元素时遇到问题 ul class xoxo blogroll ul 我怎样才能选择它ul元素 在我的代码中我像这样使用 var list document body querySelector u
  • Javascript 在另一个函数中检测“Shift”键按下

    我正在从 Flash 影片 使用外部接口 调用我的 html 页面中的 Javascript 函数 并且我想知道调用该函数时用户是否按下了 Shift 键 例如 如果我通过鼠标单击调用该函数 这似乎很简单 因为我可以传递事件并检查 if e
  • 使用命名的成功/错误回调在 AngularJS 中声明一个 Promise

    我正在尝试做一些与 http 服务非常相似的事情 根据我的理解 http 返回一个 Promise 对象 使用它时 语法是 http success function data success callback error function
  • 递归修剪对象中所有元素的更好方法?

    如果我有一个像这样的物体 const obj field subfield innerObj a asdasd asdas innerArr s ssad innerArrObj b adsad 我想出了这样的东西 const trimFi
  • 在 setInterval / setTimeout 中使用变量作为时间[重复]

    这个问题在这里已经有答案了 这是一个示例情况 var count time 1000 setInterval function count 1 time 上面的代码会将 count 变量加 1 即 1000 毫秒 看来 setInterva
  • 如何在php中使用一张图像绘制形状

    我需要使用图像的一部分来创建帧图像 例如 用户将从后端上传图像片段 现在我需要根据前端用户的要求在前端创建一个框架 用户将选择框架的高度和宽度 然后他将选择该图像片段 如下所示 我没有办法做到这一点 我尝试通过 css 和 html can
  • 游戏手柄 JavaScript 未能按预期更新

    我正在尝试让浏览器报告我的 XBOX 控制器的状态 然而 在第一次按下按钮后 它似乎变得 卡住 我究竟做错了什么
  • html canvas动画卡顿

    谁能解释为什么提供的画布动画断断续续 我创建了一个测试存根来演示该问题 我在桌面上的 FF Chrome IE 以及 Android 上的 FF 和 Chrome 中看到了卡顿现象 口吃是由于垃圾收集造成的吗 似乎 raf 在每次调用时都会
  • Firebase 身份验证在 iOS 登录时卡住,没有错误

    我已经使用电子邮件和密码设置了 firebase 身份验证登录的最基本实现 firebase auth signInWithEmailAndPassword email password then gt console log Logged
  • jQuery 悬停时滚动到 div 并返回到第一个元素

    我基本上有一个具有设定尺寸的 div 和overflow hidden 该 div 包含 7 个子 div 但一次只显示一个 我希望当它们各自的链接悬停时能够平滑地垂直滚动 但是 第一部分 div 没有链接 并且是没有悬停链接时的默认部分
  • JavaScript 中的实时摩尔斯电码转换器

    在看到谷歌关于莫尔斯电码 gmail 的愚人节笑话后 我想我应该尝试用 javascript 创建一个实时莫尔斯电码转换器 我正在使用正则表达式和替换将莫尔斯电码更改为字符 例如 replace g a replace g r 我遇到的问题
  • 是否可以将请求标头添加到 CORS 预检请求中?

    我有一个从外部服务器 不是服务器 访问 API 的网站 为网站提供服务 通过简单的XmlHttpRequest 见下文 那个API 需要将用于访问服务的 API 密钥添加为请求标头 然而 正如这些CORS https developer m
  • Aurelia - 仅 HTML 自定义元素的内联定义

    我的 Aurelia 视图模型中有一个递归对象 如下所示 Class BottomlessPit Name string MorePits BottomlessPit null 因此 我想在 Aurelia 视图中使用递归模板 它只会在一个
  • 不使用控件时,视频元素在 Chrome 中消失

    So I think这是一个浏览器错误 它出现在一个更复杂的设计 网站中 但我已经进行了很好的尝试 简化了我的代码和设计等 并发现了以下内容 嵌入时
  • 检测浏览器选项卡是否具有焦点

    是否有可靠的跨浏览器方法来检测选项卡是否具有焦点 场景是 我们有一个定期轮询股票价格的应用程序 如果页面没有焦点 我们可以停止轮询并为每个人节省流量噪音 特别是当人们喜欢打开具有不同投资组合的多个选项卡时 Is window onblur
  • 搜索多维数组 JavaScript

    我有一个如下所示的数组 selected products 0 r1 7up 61 Albertsons selected products 1 r3 Arrowhead 78 Arrowhead selected products 2 r
  • DOM 解析器 Chrome 扩展内存泄漏

    问题 我开发了一个扩展程序 可以拦截 Web 请求 获取 Web 请求来源的 HTML 并对其进行处理 我使用 DOMParser 来解析 HTML 并且意识到 DOMParser 正在导致大量内存泄漏问题 最终导致 chrome 扩展崩溃
  • 如何获得 JavaScript 阶乘程序的循环来显示所使用的工作?

    你好 我面临着用 JavaScript 编写一个程序的挑战 尽管我对它不太了解 但它要求用户输入一个数字 然后计算该数字的阶乘 我使用了已经提出的问题并设法使计算正常工作 但无法获得所需的输出 我必须在以下输出中获取它 而不使用任何花哨的库
  • 用javascript调用外部网页(跨域)

    我正在尝试使用以下网络服务来验证提要这个问题 https stackoverflow com questions 11996430 check if a url is a valid feed 但浏览器不允许我向另一台服务器发送 ajax

随机推荐

  • 使用带有当前时间的随机数生成器与不使用随机数生成器

    我想了解使用随机数生成器与System currentTimeMillis 作为种子并仅使用默认构造函数 也就是说 这之间有什么区别 Random rand new Random System currentTimeMillis 和这个 R
  • Web 服务器不读取 .htaccess 文件

    我安装了 Ubuntu 12 10 并安装了 apache2 但我的 htaccess 文件无法正常工作 我将其设置为在链接中不能包含 php 文件扩展名 因此看起来像 www website com login 而不是 login php
  • 使用 sidekiq 处理两个独立的 Redis 实例?

    下午好 我有两个独立但相关的应用程序 他们都应该有自己的后台队列 阅读 单独的 Sidekiq 和 Redis 进程 然而 我希望偶尔能够将工作推给app2的队列来自app1 从简单的队列 推送的角度来看 如果app1没有现有的 Sidek
  • SAPUI5自定义伪事件

    在 SAPUI5 OpenUI5 中定义自定义伪事件的最佳实践是什么 例如 假设我想在按住扩展的 sap m Button 几秒钟时触发一个事件 我不确定是否还有任何 最佳实践 我真的认为只有 一种 实践 但我渴望学习任何其他做法 所以如果
  • JPA/JPQL:SELECT 子句中不允许使用 AS 标识符

    我有一个非常复杂的 JPQL 查询 其形式为 SELECT NEW com domain project view StandingsStatLine ro id AS rid cl name AS team te ordinalNbr 1
  • 带 Riverpod 的 Flutter 导航栏

    我尝试管理我的状态 但我真的做不到 我想了解如何使用 Riverpod 包在管理页面底部创建导航栏 我设法管理我们单击的页面 但我不知道如何根据所选按钮返回正确的寻呼机 主要 dart import package flutter mate
  • 使用 Preg_Replace 替换撇号时遇到问题

    我试图从文本中删除撇号 但它并没有真正起作用 一定是一件小事 text preg replace text 这就是我现在用来删除它的方法 我究竟做错了什么 有一系列的方法可以删除特殊字符 将它们转换为网址并将它们存储在我的数据库中 然而 最
  • 如何防止背景图像在更改时闪烁

    我通过 JavaScript 将重复的背景图像从画布应用到 div 如下所示 var img canvas document createElement canvas img canvas width 16 img canvas heigh
  • 如何检查第一个数据帧中的值是否包含或与另一个数据帧中的值匹配

    我在用R处理一些数据框 我的问题与如何检查第一个数据帧中的变量值是否与另一个数据帧中的值匹配有关 这场比赛与其他比赛有很大不同merge or join 我将介绍我的数据框 dput 最后 我的第一个数据框是df1 它包含变量name我想将
  • 使用 AngularJS 在 Chrome 中中断变量更改

    如同this https stackoverflow com questions 11618278 how to break on property change in chrome问题 我想打破 Chrome 中的变量更改 但是 我使用的
  • 使用 chrome.history.deleteRange 未完全删除历史记录

    我写了一个小扩展 使用deleteRange from chrome historyAPI 用于删除开始时间戳和结束时间戳之间的部分浏览器历史记录 chrome history deleteRange startTime startTime
  • 使用C#正则表达式替换XML元素内容

    我正在编写一些处理记录 xml 数据的代码 并且我希望能够替换文档中某些元素 例如密码 的内容 我不想序列化和解析文档 因为我的代码将处理各种模式 输入文档示例 doc 1
  • 虚拟主机无法在 zend 框架中工作

    以下是我在 etc apache2 sites available 中的虚拟主机
  • 实体框架 6.1:字典中不存在给定的键

    我有一个带有一些关系的表 程序工作正常 直到我在该表和customer表 ddlPermissionCode表 第一表 如下 CREATE TABLE dbo PermissionCode Id int NOT NULL IDENTITY
  • Flutter 在选择时更改 TabItem 背景

    我想问一下 选择选项卡时如何更改选项卡项目背景颜色 抱歉 我是颤振的新手 使用底部标签栏还是标签栏更好 像这样 我的代码 bottomNavigationBar new TabBar tabs Tab icon new Icon Icons
  • 如何找到二维数组JAVA中元素的平均值? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要以下程序的帮助 编写一个方法 将二维双精度数组作为输入参数并返回数组元素的平均值 谁能告诉我该怎么做 我当前的代码 public
  • 通过 Slack API 发送命令

    有没有办法以编程方式发送command通过 API 到 Slack 我已成功发布消息 var postingResponse client UploadValues https slack com api chat postMessage
  • Android GPS 的准确度如何? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我好像在某处读过Android的GPS精度约为10厘米 任何人都可以验证或更正这个吗 原因是我正在尝试开发的应用程序会跟踪用户访问过的位置 这将极大地
  • 谷歌地图圆圈与标签

    我使用 google 地图 api 创建了地图视图 通过使用 google maps Circle 圆圈在地图上打印 将标记更改为圆圈 没有任何问题 但我无法在其中添加标签或文本 我该如何解决这个问题 这是我用来打印圆圈的代码 functi
  • 如何使用 fetch api 及其 javascript 加载 html 页面?

    我正在尝试使用 fetch API 加载 HTML 页面及其 JavaScript 脚本 我可以使用 ajax 和 JQuerySee here https stackoverflow com questions 50847274 fetc