b)使用

浏览器在不同域下的JS是不能进行通信的,如:

Main.htm部署的地址为http://127.0.0.1:8080/main.htm

SubPage.htm部署地址为http://localhost:8081/subpage.htm

http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
<h2></h2>
<script>

    function ResiveMessage(s) {
        alert("this is parent page");
        document.getElementById('inputParent').value = s
        document.title = s;
    }

</script>
<input type="text" name="inputParent"  />
<h2></h2>
<iframe ></iframe>
</body>
</html>

>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
<input type="text" name="inputChile" id="inputParent" /><input type="button" value="发送" id="btnSend" onclick="javascript:SendMessage()" />

<script>

    function SendMessage() {
        var s = document.getElementById("inputParent").value;
        alert(s);

        window.top.ResiveMessage(s); //调用父窗口的ResiveMessage方法
    }

</script>

</body>
</html>

 

浏览主页面http://127.0.0.1:8080/main.htm,点击子页面的发送按扭会报跨域访问权限错误(用的Google Chrome)

Unsafe JavaScript attempt to access frame with URL http://127.0.0.1:8080/main.htm from frame with URL http://localhost:8081/subpage.htm. Domains, protocols and ports must match.

 

HTML5中提供了跨域访问的window.postMessage()方法发送消息和监听事件MessageEvent

修改main.htm页面代码

>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
<h2></h2>
<script>

    var target = "http://localhost:8081";   //合法的消息来源
    function ResiveMessage(s) {
        alert("this is parent page");
        document.getElementById('inputParent').value = s
        document.title = s;
    }

    function Listener(e) {
        if (e.origin == target) {   //判断消息来源,如果来源合法,处理消息
            ResiveMessage(e.data);
        }
        else {      //消息来源不合法在此处理
            // do nothing here
        }
    }
    window.addEventListener("message", Listener, true); //添加消息监听事件    
</script>
<input type="text" name="inputParent" id="inputParent" /><input type="button" value="发送" id="btnSend" />
<h2></h2>
<iframe id="iframe1" src="http://localhost:8081/subpage.htm"></iframe>
</body>
</html>

 

>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
<input type="text" name="inputChile" id="inputParent" /><input type="button" value="发送" id="btnSend" onclick="javascript:SendMessage()" />

<script>
    var target = "http://127.0.0.1:8080/subpage.htm";
    function SendMessage() {
        var s = document.getElementById("inputParent").value;
        alert(s);

        window.top.postMessage(s,target);	//使用父页面的postMessage方法发送消息
    }
</script>

</body>
</html>


以上Demo在IE9和Google Chrome中测试通过。

在SubPage中使用了main.htm中的postMessage方法发送数据,再通过MessageEvent事件监听

也就是说HTML5提供了一个可以跨域访问的接口postMessage和一个监听跨域消息的事件MessageEvent。由postMessage方法来接收消息,再由MessageEvent处理消息

 

没有找到Html5的离线版SDK,哪位大神有的话发一份给我(xuf22@126.com),谢谢

相关文章:

  • 2021-07-23
  • 2022-01-12
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-05-08
  • 2022-12-23
  • 2021-11-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-09
  • 2022-12-23
相关资源
相似解决方案