window.parent与window.openner区别

本文详细解释了JavaScript中parent.window、top.window及window.parent与window.opener的区别与应用场景,并提供了具体的代码示例。

今天总结一下js中几个对象的区别和用法:

首先来说说 parent.window与top.window的用法

"window.location.href"、"location.href"是本页面跳转

"parent.location.href"是上一层页面跳转

"top.location.href"是最外层的页面跳转

举例说明:

如果A,B,C,D都是jsp,D是C的iframe,C是B的iframe,B是A的iframe,如果D中js这样写

"window.location.href"、"location.href":D页面跳转

"parent.location.href":C页面跳转

"top.location.href":A页面跳转

现在终于明白了连接的时候target的用法了:

_blank:重新打开一个窗口

_parent:父窗口执行重定向

_self:自身页面重定向

_top:第一个父窗口重定向

综上所述可知:parent.window:父窗口对象 top.window:第一个父窗口的对象

下面来重点看看window.parent与window.openner区别

window.parent 是iframe页面调用父页面对象,当我们想从iframe内嵌的页面中访问外层页面是可以直接利用window.parent获取;

例子如下:

A.html

<html>
<head>
    <title>父页面</title>
</head>
<body>
    <form id="form1" action="">
        <div>
            输入值:
            <input type="text" name="username" id="username" /><br />
            <iframe src="b.html" width="400px" height="300px"></iframe>
        </div>
    </form>
</body>
</html>

B.html

<html>
<head>
<script type="text/javascript">
 function getpValue()
 {
    document.getElementByIdx_x_x_x("span1").innerText=window.parent.document.getElementByIdx_x_x_x("username").value;
 }
</script>
</head>
<body>
<span>文本框值为:</span><span id="span1"></span><br />
<input type="button" value="获取父窗口内的文本框值" onclick="getpValue();">
</body>
</html>

 window.opener 是window.open或超链接<a> 打开的子页面调用父页面对象

例子如下
a.html

<html>
<head>
    <title>父页面</title>
    <script type="text/javascript">
        function openB()
        {
            window.open('b.html','b','width=400,height=200,status=no,toolbar=no,menubar=no,location=no,resizable=yes,left=200,top=100');
        }
    </script>
</head>
<body>
    <form id="form1" action="">
        <div>
            输入值:
            <input type="text" name="username" id="username" /><br />
            <input type="button"  value="打开窗口B" onclick="openB();" /><br />
            <a href="b.html" target="_blank">超链接打开B页面</a>
        </div>
    </form>
</body>
</html>

b.html

<html>
<head>
<script type="text/javascript">
 function getpValue()
 {
    document.getElementByIdx_x_x_x("span1").innerText=window.opener.document.getElementByIdx_x_x_x("username").value;
 }
</script>
</head>
<body>
<span>文本框值为:</span><span id="span1"></span><br />
<input type="button" value="获取父窗口内的文本框值" onclick="getpValue();">
</body>
</html>

下面来举几个常用的例子:

parent.window与top.window一般在分割的页面即 frameset或iframe中使用

注销整个框架后返回到login.aspx:parent.window.location='Login.aspx'或者

                                top.window.location='Login.aspx'

window.parent也是常在框架中使用,

刷新:window.parent.location.reload();或者刷新某个框架:window.parent.MainForm.location.reload();

获得其他框架的元素值:window.parent.MainForm.form1.text1.value;

window.opener主要是获得通过超链接或者 window.open() 打开本身页面的页面的一些,比如获得值,刷新等

刷新:window.opener.location.reload();

获值:window.opener.document.getElement("txtName").value;

后退:top.playFrame.history.go(-1);

前进: top.playFrame.history.go(1);

刷新: top.playFrame.location.reload();

就总结到这里,这些对象很实用  

多思考,多创新,才是正道!
import app from "app"; import {tr, hWidget} from "modules/iscp/piagauss/ipa/common/hw/hw"; import commonUtil from "modules/iscp/piagauss/common/commonUtil"; import "modules/iscp/piagauss/ipa/common/hw/extra/ipaHwHeadInfoV2"; import {isFunction} from "lodash"; import "../../style.less!"; import "./lib/gc.spread.sheets.excel2013white.14.2.0.css!"; //问题:1、窗口大小变化后,spread sheet数据消失了?bug? 2、左下角样式问题 export default class SpreadjsWin extends hWidget<webix.ui.window> { private openner: any; private sqlCode: any; private spreadjsData: any; private collList = []; private roleList = []; private workBook: any; constructor(openner, sqlCode) { super(); this.openner = openner; this.sqlCode = sqlCode; app.ui(this.$ui()); } private queryBuilderId = webix.uid().toString(); private formId = webix.uid().toString(); private queryBuilderId2 = webix.uid().toString(); private formId2 = webix.uid().toString(); public loadScript(src) { var script = document.createElement("script"); script.onload = function () { }; script.src = src; document.head.appendChild(script); //or something of the likes } //查询数据渲染到spreadsheet public queryCustomData(pageSize, curPage, sql, that, workbook) { var sheet = workbook.getSheet(0); let thatCurrent = this; if (localStorage.getItem(this.sqlCode) != null) { this.spreadjsData = JSON.parse(localStorage.getItem(this.sqlCode)); sheet.setDataSource(this.spreadjsData.result, true); this.configSheet(sheet); } else { let url = `../services/publicdata/propheticDataService/queryDataInfo`; let params = { vo: { dimension: "SQL.SCRIPT.QUERY", objectType: "SCript", sqlContent: sql, sqlCode: that.parent().getSqlCode() ? that.parent().getSqlCode() : 0, sqlName: $$("sqlName_data" + that.parent().formId).getValue(), }, pageVO: { pageSize: 10000, curPage: curPage, resultMode: 2, }, }; let result; commonUtil.postReqAjax(url, params, function (a, b, c) { if (b && b.json) { result = b.json(); if (result.rsCode != "0002") { thatCurrent.spreadjsData = result; sheet.setDataSource(thatCurrent.spreadjsData.result, true); thatCurrent.configSheet(sheet); } else { commonUtil.showMessage2(result.rsMsg); } } else { result = {}; } }); } } public configSheet(sheet) { sheet.setRowCount(2, GC.Spread.Sheets.SheetArea.colHeader); for (var i = 0; i < sheet.getColumnCount(); i++) { sheet.setValue(0, i, this.toExcelHeader(i + 2), GC.Spread.Sheets.SheetArea.colHeader); } } public toExcelHeader(index) { if (index <= 0) { throw new Error("index must be 1 or greater"); } index--; var charCodeOfA = "a".charCodeAt(0); // you could hard code to 97 var charCodeOfZ = "z".charCodeAt(0); // you could hard code to 122 var excelStr = ""; var base24Str = index.toString(charCodeOfZ - charCodeOfA + 1); for (var base24StrIndex = 0; base24StrIndex < base24Str.length; base24StrIndex++) { var base24Char = base24Str[base24StrIndex]; var alphabetIndex = base24Char * 1 == base24Char ? base24Char : base24Char.charCodeAt(0) - charCodeOfA + 10; // bizarre thing, A==1 in first digit, A==0 in other digits if (base24StrIndex == 0) { alphabetIndex -= 1; } excelStr += String.fromCharCode(charCodeOfA * 1 + alphabetIndex * 1); } return excelStr.toUpperCase(); } public allFilterOn() { //设置行筛选 var sheet = this.workBook.getActiveSheet(); sheet.rowFilter(new GC.Spread.Sheets.Filter.HideRowFilter(new GC.Spread.Sheets.Range(-1, 0, -1, sheet.getColumnCount()))); } public init(sqlCode) { let that = this; var script = document.createElement("script"); script.onload = function () { var script = document.createElement("script"); script.onload = function () { // Initialize a workbook var workbook = new GC.Spread.Sheets.Workbook(document.getElementById("ss"), {sheetCount: 3}); that.workBook = workbook; //状态栏 var statusBar = new GC.Spread.Sheets.StatusBar.StatusBar(document.getElementById("statusBar")); statusBar.bind(workbook); //公式文本编辑区 var fbx = new GC.Spread.Sheets.FormulaTextBox.FormulaTextBox(document.getElementById("formulaTextBox")); fbx.workbook(workbook); let sql = $$(that.openner.sqlEditor).getValue(); let showSize = parseInt($$("conditionQuery" + that.openner.sqlEditor)._elements.display2.getValue()); that.queryCustomData(showSize, 1, sql, that.openner, workbook); }; script.src = "modules/iscp/piagauss/ipa/publicdata/propheticData/dataQueryProcess/spreadjs/lib/li.js"; document.head.appendChild(script); }; script.src = "modules/iscp/piagauss/ipa/publicdata/propheticData/dataQueryProcess/spreadjs/lib/gc.spread.sheets.all.14.0.0.min.js"; document.head.appendChild(script); var myEvent = $("#allFilterOn").on("click", function () { that.allFilterOn(); }); } public showWin() { this.view().show(); } public closeWin() { localStorage.setItem(this.sqlCode, JSON.stringify(this.spreadjsData)); this.view().destructor(); } protected ui() { let that = this; let closeWin = function () { let win = this; if (win.getParentView) { while (win.getParentView()) { win = win.getParentView(); } if (isFunction(win.hide)) { win.hide(); } } }; return { id: "spreadjsWin" + that.formId, view: "window", css: "hw_preferenceV2_window", move: false, position: "center", modal: true, height: 90 + "%", width: 80 + "%", head: { isolate: true, cols: [{width: 24}, { view: "label", id: "spreadjsWinHead" + that.formId, label: "<span style='font-family:Tahoma,Arial,微软雅黑,sans-serif;font-style:normal;font-weight:bold;'>" + $$("sqlName_data" + this.openner.parent().formId).getValue() + "-" + this.sqlCode + "</sapn>", }, { view: "icon", icon: "ex-closeV2", tooltip: tr("button.close"), align: "right", on: { onItemClick: () => this.closeWin(), }, }, {width: 13},], }, body: { view: "label", id: "spreadjsWinBody" + that.formId, height: "100%", label: `<div style="width:30%; height:3%;line-height: normal";><i>fx</i> <input type="text" id="formulaTextBox"/>            <input type="button" id="allFilterOn" value="Demo-筛选"/></div><div id='ss' style='width:100%; height:94%;line-height: normal;'></div><div id="statusBar" style='width:100%; height:2%;line-height: normal;'></div>`, }, }; } } 阅读上述代码,并将其改写成 vue开发方式的代码
最新发布
12-02
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值