类 web components 思想原生解决方案

2015-08-15 12:50:56 +08:00
 yozman

代码参考
https://github.com/yozman/flyinn/issues/12#issuecomment-131292931

(function (window) {

    /***
     * 执行入口
     */
    window.onload = function () {
        打补丁();
        初始化();
    };

    /***
     *  修复并扩展使用 iframe 带来的一些兼容问题
     *  1. iframe 宽高问题
     *  2. 超链接点击问题
     *  3. 一个结构多个样式问题
     */
    function 打补丁() {
        设置宽高();
        设置链接();
        设置样式();
    }

    /***
     *  给框架设置固定宽高
     *  需要设计师配合提供准确的数值
     *  优先级为: iframe(外部) > body(内部) > 100%(默认值)
     */
    function 设置宽高() {
        var aFrame = document.getElementsByTagName('iframe');
        for (var i = 0; i < frames.length; i++) {
            var iFrame = frames[i].document.body;
            "width height".replace(/\w+/g, function (s) {
                aFrame[i].style[s] = aFrame[i][s] || iFrame.getAttribute(s) || '100%';
            });
            aFrame[i].style.display = 'block';
        }
    }

    /***
     *  修复超链接在框架内跳转的问题
     */
    function 设置链接() {
        var aA = document.getElementsByTagName('a');
        for (var i = 0; i < aA.length; i++) {
            aA[i].onclick = function () {
                if (this.href) {
                    top.location = this.href;
                    return false;
                }
            };
        }
    }

    /***
     *  解决一个结构多个样式问题
     *  利用地址 hash 给 body 添加相应的 class
     */
    function 设置样式() {
        location.hash.length > 1 && (
            document.body.className += ' ' + location.hash.substring(1)
        );
    }

    /***
     *  初始化
     */
    function 初始化() {
        var aFrame = document.getElementsByTagName('iframe');
        for (var i = 0; i < frames.length; i++) {
            aFrame[i].innerHTML && (
                frames[i].arguments = eval('(' + aFrame[i].innerHTML + ')')
            );
            frames[i].main && frames[i].main(frames[i].arguments);
        }
        self == top && self.main && self.main();
    }

})(window);

基于 iframe 实现的

2457 次点击
所在节点    程序员
1 条回复
laosb
2015-08-15 18:14:35 +08:00
好一个中文编程

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/213382

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX