分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

js跨域传值,兼容ie8以上

发布时间:2023-09-06 02:31责任编辑:郭大石关键词:js跨域

js跨域传值,兼容ie8以上

事先说明,此方法并不支持ie8,如果想要支持ie8的话,需要用这种思路(来自微软):

if (window.addEventListener) { ??window.addEventListener(‘message‘, function (e) { ????if (e.domain == ‘example.com‘) { ??????if (e.data == ‘Hello World‘) { ????????e.source.postMessage(‘Hello‘); ??????} else { ????????console.log(e.data); ??????} ????} ??}); } else { // IE8 or earlier ??window.attachEvent(‘onmessage‘, function (e) { ????if (e.domain == ‘example.com‘) { ??????if (e.data == ‘Hello World‘) { ????????e.source.postMessage(‘Hello‘); ??????} else { ????????alert(e.data); ??????} ????} ??}); } 

这里为了保持代码简洁,就不详细介绍了,有需要的可以在下方留言我会解答的

不写是因为网上好多例子都没有几个能解决跨域问题的,更多的还都是复制粘贴吸引人气的那些人,更可气

我们要实现的目的是:父页面的文本框每次改变,都会将内容发送到子页面由子页面处理:

我们这里的处理方式是在控制台打印出来

好啦先上代码:

  • 新建2个html,a.html和b.html
  • 我是为了省事将a.html放到了webStorm下,而b.html放到了我的IDEA项目中

a.html

<!doctype html><html lang="zh"><head> ???<meta charset="UTF-8"> ???<meta content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" ?????????name="viewport"> ???<meta content="ie=edge" http-equiv="X-UA-Compatible"> ???<title>父页面</title></head><body><label for="test">父页面的文本框 ???<input id="test" ?onpropertychange="sendMsg()" oninput="sendMsg()" type="text"></label><br><hr><iframe id="child" src="http://localhost/a"></iframe><script type="text/javascript"> ???<!--将文字发送到子页面--> ???function sendMsg() { ???????var test = document.getElementById("test"); ???????console.log("父页面给子页面发送了" + test.value); ???????window.frames[0].postMessage(test.value, "http://localhost"); ???}</script></body></html>

b.html

<!doctype html><html lang="zh"><head> ???<meta charset="UTF-8"> ???<meta content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" ?????????name="viewport"> ???<meta content="ie=edge" http-equiv="X-UA-Compatible"> ???<title>子页面</title></head><body>这里是子页面内容其实子页面几乎什么也没有<script type="text/javascript"> ???window.onmessage = function (event) { ???????console.log("子页面收到了" + event.data) ???};</script></body></html>

如图所示:

这里使用的是127.0.0.1和localhost做的测试,属于跨域,正常情况下是无法传值的

尝试在父页面的文本框中输入一些东西看一下

这样我们就可以正常传值了,随后根据需求进行处理就可以了

附上ie下测试效果:

相关介绍:

  • onpropertychange事件是为了兼容一下ie11以下版本,如果不需要兼容,可以去掉
  • 建议使用addEventListener方法来正式使用,好出嘛,就是你同时添加两个oninput事件使用这种方法不会冲突,否则只能同时响应一个方法
  • 其他的还不知道,如果有需要可以在评论区留言

js跨域传值,兼容ie8以上

原文地址:https://www.cnblogs.com/liangyun/p/10304375.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved