gpt4 book ai didi

javascript - 使用 Javascript 将变量传递给弹出窗口

转载 作者:行者123 更新时间:2023-11-29 10:18:30 24 4
gpt4 key购买 nike

我需要将一些文本从当前页面传递到弹出窗口,而不需要服务器点击。信息(此处用 90 表示)已经在父表单中可用(它就像存储在隐藏变量中的一段长文本)。我只需要将其显示为弹出窗口。

这是我尝试过的方法,这在一定程度上起作用,但如果我传递文本而不是数字,则不起作用。我的第二个担心是解决方案看起来有点难看。有小费吗?谢谢。

这是 SCCE,您可以直接在您的机器上运行它。

<html>
<head>
<title>A New Window</title>

<script type="text/javascript">
var newWindow;
var data;


function makeNewWindow(param) {
data = param;

if (!newWindow || newWindow.closed) {
newWindow = window.open("","sub","status,height=200,width=300");
setTimeout("writeToWindow()", 50); /* wait a bit to give time for the window to be created */
} else if (newWindow.focus) {
newWindow.focus( ); /* means window is already open*/
}
}


function writeToWindow() {
var k = data;
alert(data);
var newContent = "<html><head><title>Additional Info</title></head>";
newContent += "<body><h1>Some Additional Info</h1>";
newContent += "<scr"+"ipt type='text/javascript' language='javascript'> var localVar; localVar = "+ k +"; document.write('localVar value: '+localVar);</scr"+"ipt>";
newContent += "</body></html>";
// write HTML to new window document
newWindow.document.write(newContent);
newWindow.document.close( ); // close layout stream
}
</script>
</head>

<body>
<form>
<input type="button" value="Create New Window" onclick="makeNewWindow('90');" />
</form>
</body>
</html>

实际上,我在谷歌上搜索并看到了一些使用 window.opener.document.forms.element 的其他方法,但在这里,窗口必须提前知道它必须从父级读取什么。我需要能够通过它,因为它会有所不同:

<textarea rows="15" name="projectcontent" id="projectcontent" cols="87"></textarea>
<a href="javascript:;" onclick="window.open('viewcon.asp', 'my_new_window','toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=yes, width=625, height=400');"><b>View Content</b></a>

<head>
<title>View Project Content</title>
</head>
<body>
<img src="/images/toplogo.jpg"><br/>
<script language="Javascript">
document.write(window.opener.document.forms['yourformname'].elements['projectcontent'].value)
</script>
<img src="/images/bottomlogo.jpg">
</body>
</html>

最佳答案

使用window.opener

From Mozilla Developer Network: When a window is opened from another window, it maintains a reference to that first window as window.opener. If the current window has no opener, this method returns NULL.

https://developer.mozilla.org/en-US/docs/Web/API/window.opener

这样你就可以在你的原始窗口上有一个回调,你可以通知窗口它已经加载并准备好了,而不是等待一个随机的延迟......

你在原来的窗口上添加了一个函数:

   window.popupReady = function (callbackToPopup) {
callbackToPopup(newData);
}

然后弹出窗口可以告诉父窗口它已准备就绪,并向它传递一个回调以用数据更新它..

然后在弹出窗口中尝试类似的操作:

window.dataReady(newData)
{
alert(newData);
}

document.addEventListener("load", function() { window.opener.popupReady (dataReady); }

我没有测试这段代码,但我会采取这样的方式,因为这应该确保 popupWindow 为您准备好并且符合 JavaScript 的精神。

关于javascript - 使用 Javascript 将变量传递给弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16681773/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com