zoukankan      html  css  js  c++  java
  • 利用html5 postMessage接口跨域设置iframe大小

    <!doctype html>
    <html>
        <head>
            <title>Document A</title>
            <meta charset="utf-8">
        </head>
        <body>
            <iframe src="http://remote-domain.com:8080/document-B.html" id="zino_iframe"></iframe>
            <script type="text/javascript">
            var zino_resize = function (event) {
                if (event.origin !== "http://remote-domain.com:8080") {
                    return;
                }
                var zino_iframe = document.getElementById('zino_iframe');
                if (zino_iframe) {
                    zino_iframe.style.height = event.data + "px";
                }
            };
            if (window.addEventListener) {
                window.addEventListener("message", zino_resize, false);
            } else if (window.attachEvent) {
                window.attachEvent("onmessage", zino_resize);
            }
            </script>
        </body>
    </html>
    
    <!doctype html>
    <html>
        <head>
            <title>Document B</title>
            <meta charset="utf-8">
            <script type="text/javascript">
            function iframe_resize(){
                var body = document.body,
                html = document.documentElement,
                height = Math.max(body.scrollHeight, body.offsetHeight, 
    	        html.clientHeight, html.scrollHeight, html.offsetHeight);
                if (parent.postMessage) {
                    parent.postMessage(height, "http://my-domain.com");
                }
            }
            </script>
        </head>
        <body onload="iframe_resize();">
            <h4>Document B</h4>
    	<p>Cross-Domain Iframe</p>
        </body>
    </html>
    

    Normally, documents on different pages are able to communicate between each other only if their domains, protocols and ports match up. HTML 5 specification comes with window.postMessage, which provides cross-domain communication between scripts.

    Syntax

    window.postMessage(message, targetOrigin, [transfer]);

    message
    Messages can be nested objects and arrays, can contain JavaScript values (strings, numbers, Dates, etc), and can contain certain data objects such as File Blob, FileList, and ArrayBuffer objects.
    targetOrigin
    The value must be either asterisk *, slash / or absolute URL. Otherwise a SyntaxError exception will be throw. If you know the window location, you should always provide this specific location instead of just putting an asterisk *
    transfer (Optional)
    These objects are transferred with the message, and they are no longer usable on the sending side.
  • 相关阅读:
    基于讯飞语音API应用开发之——离线词典构建
    在Linux下安装redis
    java学习路线
    怎么做压力测试
    性能测试概念及参数介绍
    总结1-JMeter压力测试
    在软件测试面试过程中如何进行自我介绍?
    Python模块常用的几种安装方式
    Jmeter(三)关联数组
    Jmeter(二)关联
  • 原文地址:https://www.cnblogs.com/kzwrcom/p/6443172.html
Copyright © 2011-2022 走看看