页面间多层嵌套的js方法调用
问题描述
- 在页面A的方法中调用layer.open打开了一个新页面(页面B)
- 页面B中有一个iframe标签,iframe标签链接了另一个页面(页面C)
- 页面A需要调用页面C的某个方法
解决方案
-
一级一级的来,先解决然后调用页面B,然后再解决如何调用页面C
-
页面C中添加一个方法
function test(){alert("成功调用页面C");}
-
在页面B中添加一个方法
function test(){ // tableIframe为iframe的id $("#tableIframe")[0].contentWindow.test(); }
-
在页面A中调用
layer.open({ type: 2, title:false, area: ['100%', '100%'], btn: ['调用页面C','确定','关闭'], // 弹层外区域关闭 shadeClose: true, btn1: function (index, layero){ // 调用页面C的方法test window["layui-layer-iframe" + index].test(); }, btn2: function(index, layero) { //点击第二个按钮处理逻辑 layer.close(index); }, btn3: function(index, layero){ //点击第三个按钮处理逻辑 layer.close(index); }, content: url, });
-
-
页面C中的js代码都是封装的,例如
var Func = (function () { var func1 = function(){} return { func1:func1 } })();
-
修改页面C中的代码,在Func中添加test方法
var Func = (function () { var func1 = function(){} var test = function(){alert("成功调用页面C");} return { func1:func1, test:test } })();
-
在页面B中修改调用
function test(){ // tableIframe为iframe的id var win = $("#tableIframe")[0].contentWindow; if(win && win.Func && win.Func.test){ $("#tableIframe")[0].contentWindow.Func.test(); } }
-
-
当iframe的跳转链接不确定时,链接有三个,可能是任意一个
-
前置条件:
- 三个链接中的封装类和方法已知
- 每个连接有且只有一个test方法(即一个封装类带一个test方法)
-
解决办法:在页面B中继续使用方法判断机制,如果封装类存在,且有test方法,则执行
function test(){ var func = []; func.push("Func1"); func.push("Func2"); func.push("Func3"); // tableIframe为iframe的id var win = $("#tableIframe")[0].contentWindow; // 遍历已知的三个封装类 $.each(func, function(key, value) { //如果存在该封装类,并且这个封装类中存在test方法 if(win[value] && win[value].test){ // 调用test方法 win[value].test(); // 如果只调用一次就返回,则添加return return; } }); }
-
分类:
JavaScript
标签:
JavaScript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」