当前位置: 首页 > news >正文

动态引入document.write的脚本

动态引入document.write的脚本

      • 方法一
      • 方式二
      • 方式三
      • 方式四

当网站需要动态引入脚本时,而引入的脚本逻辑又是通过document.write执行时,往往会出现问题。因为动态引入的脚本是会在页面DOMContentLoaded 事件完成后触发onload事件,此时页面dom结构渲染完成了,而此时document.write的渲染会把页面内容清空之后在写入。为了防止重复渲染,浏览器会禁止document.write执行。

Failed to execute ‘write’ on ‘Document’: It isn’t possible to write into a document from an asynchronously-loaded external script unless it is explicitly opened

方法一

改变页面加载的顺序
可以使用document.open打开页面渲染,改变页面的结构后调用document.close重新渲染

  <script>// 动态引入js文件document.open();document.write(`\<script src="https://srcfile/${num}/header.js"\>\<\/script\>`)</script><!--header.js会动态插入这里--><div id="app"></div><script>document.write(`\<script src="https://srcfile/${num}/footer.js"\>\<\/script\>`)document.close();</script><!--footer.js会动态插入这里-->

开启document.open之后,document.write的内容就会紧跟着写在document后面,而不会覆盖原始内容

方式二

将脚本作为接口地址请求,获取到内容,然后通过Dom.parser将内容转为html后解析里面的内容,插入网站中
需要处理文本内容

方式三

使用iframe存放脚本

const header_src = `https://srcfile/${num}/header.js`const iframe = document.querySelector('.heade-iframe');loadScriptViaIframe = () => {iframe.onload = () => {const iframeDoc = iframe.contentDocument || iframe.contentWindow.document;iframeDoc.open();iframeDoc.write(`\<script src="${header_src}"\>\<\/script\>`);iframeDoc.close();};}loadScriptViaIframe()document.body.insertBefore(iframe, document.body.firstChild);

适用性不强

方式四

如果脚本方能够提供可以动态引入的脚本文件最好

http://www.xdnf.cn/news/424063.html

相关文章:

  • 出于PCB设计层面考虑,连排半孔需要注意哪些事项?
  • 5. 动画/过渡模块 - 交互式仪表盘
  • talk-linux 不同用户之间终端通信
  • C++ 基础知识
  • C++—特殊类设计设计模式
  • 汇添富基金徐寅喆:低利率环境下的短债基金投资策略
  • Hadoop的目录结构和组成
  • CSS3 基础知识、原理及与CSS的区别
  • 基于FPGA的视频接口之千兆网口(六GigE纯逻辑)
  • 使用scp命令拷贝hadoop100中文件到其他虚拟机中
  • SQL、Oracle 和 SQL Server 的比较与分析
  • 数据结构(一) 绪论
  • 【C语言极简自学笔记】井字棋开发
  • Ozon平台产品关键词优化指南:精准引流与转化提升实战策略
  • 影刀RPA开发-CSS选择器介绍
  • 中国品牌日 | 以科技创新为引领,激光院“风采”品牌建设结硕果
  • vscode 同一个工作区,不同文件夹之间跳转问题
  • 嵌入式学习笔记 - HAL_ADC_ConfigChannel函数解析
  • 2025-05-13 Unity 网络基础12——大小端模式
  • centos中JDK_PATH 如何设置
  • 从 Vue3 回望 Vue2:事件总线的前世今生
  • Oracles数据库通过存储过程调用飞书接口推送群组消息
  • FPGA:XILINX FPGA产品线以及器件选型建议
  • MySQL 8.0 OCP(1Z0-908)英文题库(31-40)
  • 【认知思维】过度自信效应:高估自我能力的认知偏差
  • 【神经网络与深度学习】局部最小值和全局最小值
  • win10 局域网内聊天
  • Mac M系列 安装 jadx-gui
  • MySQL数据库故障排查指南
  • 【2025最新】Pycharm里如何运行多个py文件