zoukankan      html  css  js  c++  java
  • 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);
    		    });
    		});
    })();
    
    本人声明: 个人主页:沐海(http://www.cnblogs.com/mahaisong) 以上文章都是经过本人设计实践和阅读其他文档得出。如果需要探讨或指教可以留言或加我QQ!欢迎交流!
  • 相关阅读:
    Tips on Hair and Final gathering
    数学公式和符号的念法
    How to use Intel C++ Compiler in Visual Studio 2008
    Number Prefixes in Mathematics
    Glossy reflections/refractions in large scene
    atomic flushing data
    elvish Template Library Plan
    [Maxim07]中光线与三角形求交算法的推导
    C# 关闭窗体立即停止进程
    MS SQL 索引设计的准则
  • 原文地址:https://www.cnblogs.com/mahaisong/p/2191169.html
Copyright © 2011-2022 走看看