parent.main.location --------------------框架网页中 获取 或控制 子窗口的相关属性
2011-09-26 09:29 沐海 阅读(1115) 评论(0) 编辑 收藏 举报这句话的意思是 :
当前窗口的 父窗口(一般会是主框架)下的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); }); }); })(); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述