JS/JQUERY(4)——parent.main.location-框架页面中,获取或控制子窗口的相关属性


当前窗口的 父窗口(一般会是主框架)下的main窗口的location(即地址栏的地址);

比如一个页面A是个frameset页面,框架页。
该框架页有两个框架窗口组成。
<frameset rows="126,*" cols="*" framespacing="0" frameborder="no" border="0">
    <frame src="timer.php" name="head" scrolling="No" noresize="noresize" id="head">
    <frame src="frame2.php" name="main" id="main">
</frameset>
页面A是个frameset页面是parent窗口,该窗口包括
两个框架窗口 分别是 head 窗口 和 main。

head窗口的页面location指向timer.php,那么在timer.php页面parent.main.location ,parent就是frameset 框架窗口,main 窗口的location便是frame2.php。

项目中对应的问题

有一个JS。blackbird.JS 是一个遮罩层。
一开始命名为  var NAMESPACE = 'log';
后来在
   window[NAMESPACE] = {
        toggle:
            function() { (isVisible()) ? hide() : show(); },
定义了其使用方式。
此JS本身是一个对象。(function(){})()
 
/*
Blackbird - Open Source JavaScript Logging Utility
Author: G Scott Olson
Web: http://blackbirdjs.googlecode.com/
http://www.gscottolson.com/blackbirdjs/
Version: 1.0
 
The MIT License - Copyright (c) 2008 Blackbird Project
*/
(function() {
    var NAMESPACE = 'log';
    var IE6_POSITION_FIXED = true; // enable IE6 {position:fixed}
 
    var bbird;
    var outputList;
    var cache = [];
 
    var state = getState();
    var classes = {};
    var profiler = {};
    var IDs = {
        blackbird: 'blackbird',
        checkbox: 'bbVis',
        filters: 'bbFilters',
        controls: 'bbControls',
        size: 'bbSize'
    }
    var messageTypes = { //order of these properties imply render order of filter controls
        debug: true,
        info: true,
        warn: true,
        error: true,
        profile: true
    };
 
    function generateMarkup() { //build markup
        var spans = [];
        for (type in messageTypes) {
            spans.push(['<span class="', type, '" type="', type, '"></span>'].join(''));
        }
 
        var newNode = document.createElement('DIV');
        newNode.id = IDs.blackbird;
        newNode.style.display = 'none';
        newNode.innerHTML = [
            '<div class="header">',
                '<div class="left">',
                    '<div id="', IDs.filters, '" class="filters" title="点击过滤相应信息">', spans.join(''), '</div>',
                '</div>',
                '<div class="right">',
                    '<div id="', IDs.controls, '" class="controls">',
                        '<span id="', IDs.size, '" title="contract" op="resize"></span>',
                        '<span class="clear" title="clear" op="clear"></span>',
                        '<span class="close" title="close" op="close"></span>',
                    '</div>',
                '</div>',
            '</div>',
            '<div class="main">',
                '<div class="left"></div><div class="mainBody">',
                    '<ol>', cache.join(''), '</ol>',
                '</div><div class="right"></div>',
            '</div>',
            '<div class="footer">',
                '<div class="left"><label for="', IDs.checkbox, '"><input type="checkbox" id="', IDs.checkbox, '" />登陆后显示提醒</label></div>',
                '<div class="right"></div>',
            '</div>'
        ].join('');
        return newNode;
    }
 
    function backgroundImage() { //(IE6 only) change <BODY> tag's background to resolve {position:fixed} support
        var bodyTag = document.getElementsByTagName('BODY')[0];
 
        if (bodyTag.currentStyle && IE6_POSITION_FIXED) {
            if (bodyTag.currentStyle.backgroundImage == 'none') {
                bodyTag.style.backgroundImage = 'url(about:blank)';
            }
            if (bodyTag.currentStyle.backgroundAttachment == 'scroll') {
                bodyTag.style.backgroundAttachment = 'fixed';
            }
        }
    }
 
    function addMessage(type, content) { //adds a message to the output list
        content = (content.constructor == Array) ? content.join('') : content;
        if (outputList) {
            var newMsg = document.createElement('LI');
            newMsg.className = type;
            newMsg.innerHTML = ['<span class="icon"></span>', content].join('');
            outputList.appendChild(newMsg);
            scrollToBottom();
        } else {
            cache.push(['<li class="', type, '"><span class="icon"></span>', content, '</li>'].join(''));
        }
    }
 
    function clear() { //clear list output
        outputList.innerHTML = '';
    }
 
    function clickControl(evt) {
        if (!evt) evt = window.event;
        var el = (evt.target) ? evt.target : evt.srcElement;
 
        if (el.tagName == 'SPAN') {
            switch (el.getAttributeNode('op').nodeValue) {
                case 'resize': resize(); break;
                case 'clear': clear(); break;
                case 'close': hide(); break;
            }
        }
    }
 
    function clickFilter(evt) { //show/hide a specific message type
        if (!evt) evt = window.event;
        var span = (evt.target) ? evt.target : evt.srcElement;
 
        if (span && span.tagName == 'SPAN') {
 
            var type = span.getAttributeNode('type').nodeValue;
 
            if (evt.altKey) {
                var filters = document.getElementById(IDs.filters).getElementsByTagName('SPAN');
 
                var active = 0;
                for (entry in messageTypes) {
                    if (messageTypes[entry]) active++;
                }
                var oneActiveFilter = (active == 1 && messageTypes[type]);
 
                for (var i = 0; filters[i]; i++) {
                    var spanType = filters[i].getAttributeNode('type').nodeValue;
 
                    filters[i].className = (oneActiveFilter || (spanType == type)) ? spanType : spanType + 'Disabled';
                    messageTypes[spanType] = oneActiveFilter || (spanType == type);
                }
            }
            else {
                messageTypes[type] = !messageTypes[type];
                span.className = (messageTypes[type]) ? type : type + 'Disabled';
            }
 
            //build outputList's class from messageTypes object
            var disabledTypes = [];
            for (type in messageTypes) {
                if (!messageTypes[type]) disabledTypes.push(type);
            }
            disabledTypes.push('');
            outputList.className = disabledTypes.join('Hidden ');
 
            scrollToBottom();
        }
    }
 
    function clickVis(evt) {
        if (!evt) evt = window.event;
        var el = (evt.target) ? evt.target : evt.srcElement;
 
        state.load = el.checked;
        setState();
    }
 
 
    function scrollToBottom() { //scroll list output to the bottom
        outputList.scrollTop = outputList.scrollHeight;
    }
 
    function isVisible() { //determine the visibility
        return (bbird.style.display == 'block');
    }
 
    function hide() {
        bbird.style.display = 'none';
    }
 
    function show() {
        var body = document.getElementsByTagName('BODY')[0];
        body.removeChild(bbird);
        body.appendChild(bbird);
        bbird.style.display = 'block';
    }
 
    //sets the position
    function reposition(position) {
        if (position === undefined || position == null) {
            position = (state && state.pos === null) ? 1 : (state.pos + 1) % 4; //set to initial position ('topRight') or move to next position
        }
 
        switch (position) {
            case 0: classes[0] = 'bbTopLeft'; break;
            case 1: classes[0] = 'bbTopRight'; break;
            case 2: classes[0] = 'bbBottomLeft'; break;
            case 3: classes[0] = 'bbBottomRight'; break;
        }
        state.pos = position;
        setState();
    }
 
    function resize(size) {
        if (size === undefined || size === null) {
            size = (state && state.size == null) ? 0 : (state.size + 1) % 2;
        }
 
        classes[1] = (size === 0) ? 'bbSmall' : 'bbLarge'
 
        var span = document.getElementById(IDs.size);
        span.title = (size === 1) ? 'small' : 'large';
        span.className = span.title;
 
        state.size = size;
        setState();
        scrollToBottom();
    }
 
    function setState() {
        var props = [];
        for (entry in state) {
            var value = (state[entry] && state[entry].constructor === String) ? '"' + state[entry] + '"' : state[entry];
            props.push(entry + ':' + value);
        }
        props = props.join(',');
 
        var expiration = new Date();
        expiration.setDate(expiration.getDate() + 14);
        document.cookie = ['blackbird={', props, '}; expires=', expiration.toUTCString(), ';'].join('');
 
        var newClass = [];
        for (word in classes) {
            newClass.push(classes[word]);
        }
        bbird.className = newClass.join(' ');
    }
 
    function getState() {
        var re = new RegExp(/blackbird=({[^;]+})(;|\b|$)/);
        var match = re.exec(document.cookie);
        return (match && match[1]) ? eval('(' + match[1] + ')') : { pos: null, size: null, load: null };
    }
 
    //event handler for 'keyup' event for window
    function readKey(evt) {
        if (!evt) evt = window.event;
        var code = 113; //F2 key
 
        if (evt && evt.keyCode == code) {
 
            var visible = isVisible();
 
            if (visible && evt.shiftKey && evt.altKey) clear();
            else if (visible && evt.shiftKey) reposition();
            else if (!evt.shiftKey && !evt.altKey) {
                (visible) ? hide() : show();
            }
        }
    }
 
    //event management ( thanks John Resig )
    function addEvent(obj, type, fn) {
        var obj = (obj.constructor === String) ? document.getElementById(obj) : obj;
        if (obj.attachEvent) {
            obj['e' + type + fn] = fn;
            obj[type + fn] = function() { obj['e' + type + fn](window.event) };
            obj.attachEvent('on' + type, obj[type + fn]);
        } else obj.addEventListener(type, fn, false);
    }
    function removeEvent(obj, type, fn) {
        var obj = (obj.constructor === String) ? document.getElementById(obj) : obj;
        if (obj.detachEvent) {
            obj.detachEvent('on' + type, obj[type + fn]);
            obj[type + fn] = null;
        } else obj.removeEventListener(type, fn, false);
    }
 
    window[NAMESPACE] = {
        toggle:
            function() { (isVisible()) ? hide() : show(); },
        resize:
            function() { resize(); },
        clear:
            function() { clear(); },
        move:
            function() { reposition(); },
        debug:
            function(msg) { addMessage('debug', msg); },
        warn:
            function(msg) { addMessage('warn', msg); },
        info:
            function(msg) { addMessage('info', msg); },
        error:
            function(msg) { addMessage('error', msg); },
        profile:
            function(label) {
                var currentTime = new Date(); //record the current time when profile() is executed
 
                if (label == undefined || label == '') {
                    addMessage('error', '<b>ERROR:</b> Please specify a label for your profile statement');
                }
                else if (profiler[label]) {
                    addMessage('profile', [label, ': ', currentTime - profiler[label], 'ms'].join(''));
                    delete profiler[label];
                }
                else {
                    profiler[label] = currentTime;
                    addMessage('profile', label);
                }
                return currentTime;
            }
    }
 
    addEvent(window, 'load',
    /* initialize Blackbird when the page loads */
        function() {
            var body = document.getElementsByTagName('BODY')[0];
            bbird = body.appendChild(generateMarkup());
            outputList = bbird.getElementsByTagName('OL')[0];
 
            backgroundImage();
 
            //add events
            addEvent(IDs.checkbox, 'click', clickVis);
            addEvent(IDs.filters, 'click', clickFilter);
            addEvent(IDs.controls, 'click', clickControl);
            addEvent(document, 'keyup', readKey);
 
            resize(state.size);
            reposition(state.pos);
            if (state.load) {
                show();
                document.getElementById(IDs.checkbox).checked = true;
            }
 
            scrollToBottom();
 
            window[NAMESPACE].init = function() {
                show();
                window[NAMESPACE].error(['<b>', NAMESPACE, '</b> can only be initialized once']);
            }
 
            addEvent(window, 'unload', function() {
                removeEvent(IDs.checkbox, 'click', clickVis);
                removeEvent(IDs.filters, 'click', clickFilter);
                removeEvent(IDs.controls, 'click', clickControl);
                removeEvent(document, 'keyup', readKey);
            });
        });
})();

 

 

转载于:https://www.cnblogs.com/xushuyi/articles/4394428.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值