不跳转提交表单的方法 websocket,SSE,ajax等 index1.html 去掉边框 index2.html 长轮询 基于 iframe location.reload() index2b.html 基于定时器的 局部更新 index3.html 通信 postMessage,支持跨域通信 https://blog.csdn.net/cmhahaha/article/details/124495507 或直接修改 iframe.src 属性,加载新页面 index4.html 弹出层,查看后台运行效果 嵌套层怎么弹出?https://blog.csdn.net/shiaijuan1/article/details/70160714 index5.html 按钮控制跳转,后台系统原型 问题: 无刷新 更新 url 后,用户刷新页面怎么办?使用 hash 模式编写 1. 属性 主页,编码为utf-8,明确指定了编码类型。 2. 方法 (1) postMessage 方法 postmessage 方法挂载到window对象上,即,使用window.postmessage()调用. 该方法接受两个参数:postMessage(message, targetOrigin): message: 就是传递给iframe的内容, 通常是string,如果你想传object对象也可以。不过使用前请参考这一句话: Objects listed in transfer are transferred, not just cloned, meaning that they are no longer usable on the sending side. 意思就是,希望亲爱的不要直接传Object。 如果有条件,可以使用是JSON.stringify进行转化。这样能保证不会出bug. targetOrigin: 接受你传递消息的域名,可以设置绝对路径,也可以设置"“或者”/“。 表示任意域名都行,”/"表示只能传递给同域域名。 //当前脚本 let ifr = window.frames['sendMessage']; //使用iframe的window向iframe发送message。 ifr.postMessage('give u a message', "http://tuhao.com"); //tuhao.com的脚本 window.addEventListener('message', receiver, false); function receiver(e) { if (e.origin == 'http://tuhao.com') { if (e.data == 'give u a message') { e.source.postMessage('received', e.origin); //向原网页返回信息 } else { alert(e.data); } } } 2) 接收方, window.addEventListener('message', handleMessage, false); // 或者 window.onmessage = handleMessage 当targetOrigin接受到message消息之后,会触发message事件。 message提供的event对象上有3个重要的属性,data,origin,source. data:postMessage传递进来的值 origin:发送消息的文档所在的域 source:发送消息文档的window对象的代理,如果是来自同一个域,则该对象就是window,可以使用其所有方法,如果是不同的域,则window只能调用postMessage()方法返回信息 3) 子页面向父页面发送消息同理: // 在 iframe 中发送消息 window.parent.postMessage('Hello to parent from iframe!', 'http://www.example.com'); (2) 长轮询 如果写过ajax的同学,应该知道,长轮询就是在ajax的readyState = 4的时,再次执行原函数即可。 这里使用iframe也是一样,异步创建iframe,然后reload, 和后台协商好, 看后台将返回的信息放在哪里, 然后获取里面信息即可. 这里是直接放在body里. var iframeCon = docuemnt.querySelector('#container'), text; //传递的信息 var iframe = document.createElement('iframe'), iframe.id = "frame", iframe.style = "display:none;", iframe.name="polling", iframe.src="target.html"; iframeCon.appendChild(iframe); iframe.onload = function(){ var iloc = iframe.contentWindow.location, idoc = iframe.contentDocument; setTimeout(function(){ text = idoc.getElementsByTagName('body')[0].textContent; console.log(text); iloc.reload(); //刷新页面,再次获取信息,并且会触发onload函数 },2000); } 不过,iframe和主页是共享连接池的,所以还是很蛋疼的,现在基本上都被XHR和hard calllback取缔了 (3) 基于 iframe 的局部刷新 (4)