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

Html中嵌入module类型的JavaScript代码,如何访问其中的函数或变量?

如果在Html中以script type="module"的方式嵌入JavaScript,在script外部,比如div的onclick事件中,是不能访问script中的变量或函数的,因它module类型指定了JavaScript代码是模块,外部无法访问模块中的内容。

如果需要访问,可以通过以下几种办法:

方法1:使用全局变量
可以将模块中的函数赋值给一个全局变量,然后在onclick中调用这个全局变量。

// 在模块中  
window.myGlobalFunction = function() {  // 你的函数实现  
};  // 在HTML中  
<div onclick="myGlobalFunction()">点击我</div>

方法2:使用事件监听器
在JavaScript模块中通过addEventListener为<div>元素添加事件监听器。这样,你可以完全在模块化的环境中工作,而不必依赖全局变量。

<div id="myDiv">点击我</div>  <script type="module">  
import { myFunction } from './myModule.js'; // 假设myFunction是你想调用的函数  document.getElementById('myDiv').addEventListener('click', function() {  myFunction();  
});  
</script>

在myModule.js中,你只需正常导出你的函数:

// myModule.js  
export function myFunction() {  // 你的函数实现  console.log('函数被调用了!');  
}

方法3:使用自定义数据属性

给div添加一个自定义数据属性(如data-action),然后在模块中通过事件监听器检查这个属性,并根据其值调用相应的函数。这种方法提供了更多的灵活性,但也需要你在模块中编写更多的逻辑来解析和调用函数。

<div id="myDiv" data-action="myFunction">点击我</div>  <script type="module">  
import * as actions from './actions.js'; // 假设actions.js导出了多个函数  document.getElementById('myDiv').addEventListener('click', function() {  const actionName = this.getAttribute('data-action');  if (actions[actionName]) {  actions[actionName]();  }  
});  
</script>

在actions.js中:

// actions.js  
export function myFunction() {  // 你的函数实现  console.log('通过自定义数据属性调用的函数!');  
}

注意:JavaScript开发的功能,运行于浏览器,他人只需在浏览器中右键查看网页源码,便可得获得源码,可以分析功能逻辑、可以复制、可以修改盗用。为了防止代码被任意分析、复制、盗用。JavaScript开发的功能可以用JShaman、JS-Obfuscator、JsJiaMi.Online等工具进行JS代码混淆加密。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 数论之高斯消元
  • Spring父子容器
  • 文心快码 Baidu Comate 前端工程师观点分享:以文心快码 Baidu Comate为例,智能代码助手需要什么(三)
  • 神经重建在自动驾驶模拟中的应用
  • CSS盒子模型(三)
  • 解读“酒过三巡,菜过五味”:三巡是多长时间?五味是哪五味?
  • ProtoBuf简要介绍与快速上手使用(C++版)
  • 回调函数的使用
  • 【STM32】看门狗
  • 【Apache Doris】周FAQ集锦:第 19 期
  • pytest自定义命令行选项
  • ML307R_APP_DEMO_SDK TCP/UDP使用介绍
  • 【vue】编辑器段落对应材料同步滚动交互
  • [底层原理] C/C++获取时间(将时间戳转换为年月日)?
  • springboot jar 配置文件同级目录 启动脚本sh 并添加日志文件,日志文件定时分文件
  • Docker容器管理
  • Docker入门(二) - Dockerfile
  • ES6--对象的扩展
  • Iterator 和 for...of 循环
  • java8 Stream Pipelines 浅析
  • Java程序员幽默爆笑锦集
  • JAVA之继承和多态
  • Laravel Telescope:优雅的应用调试工具
  • mac修复ab及siege安装
  • Spring Boot快速入门(一):Hello Spring Boot
  • SpringBoot 实战 (三) | 配置文件详解
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 分布式任务队列Celery
  • 强力优化Rancher k8s中国区的使用体验
  • 使用parted解决大于2T的磁盘分区
  • 小程序button引导用户授权
  • 自制字幕遮挡器
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • ‌JavaScript 数据类型转换
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #07【面试问题整理】嵌入式软件工程师
  • #Datawhale AI夏令营第4期#AIGC方向 文生图 Task2
  • #define 用法
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (27)4.8 习题课
  • (55)MOS管专题--->(10)MOS管的封装
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (day18) leetcode 204.计数质数
  • (pytorch进阶之路)扩散概率模型
  • (多级缓存)缓存同步
  • (二)windows配置JDK环境
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (四) 虚拟摄像头vivi体验
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计