gpt4 book ai didi

javascript - 使用 Javascript 将值传递给子窗口

转载 作者:行者123 更新时间:2023-12-03 02:18:44 24 4
gpt4 key购买 nike

我正在尝试从父页面获取问题 ID 并将其传递到我的新子页面。当子窗口收到响应时,它会将这些数据放入 text_body id 中。我已成功创建问题 ID 并打开一个新窗口。但是,将值传递给 text-body id 时出现错误。

Cannot set property 'value' of null.

我认为问题的发生是因为 JavaScript 仍然检测到前一页,并且无法将焦点转移到新窗口中。我在下面包含了我的源代码。

function wait(ms){
var start = new Date().getTime();
var end = start;
while(end < start + ms) {
end = new Date().getTime();
}
}

var body = document.getElementById('question').innerText;
alert(body);

var k = window.open("http://testing/support");
wait (2000);
k.focus();
wait (1000);
k.focus();
k.document.getElementById('text_body').value = body;

最佳答案

由于跨域限制,浏览器限制了打开弹出窗口和 iframe 的安全性。

您收到 Cannot set property 'value' of null 的原因是您尝试运行代码以直接从 javascript 打开窗口 - 没有任何用户行动

这将阻止代码正确运行,因此 'value' (属性或变量)为 null(k 子窗口)是你的错误;当您尝试设置变量'value'时,k 为 null。

浏览器将以不同方式请求允许弹出窗口的权限。如果用户尚未单击某些内容来请求弹出窗口,则尚未获得允许该弹出窗口的权限。

下面的示例代码演示了您将在初始调用打开窗口并设置子变量时遇到错误,而无需用户操作,但是当用户单击某些内容时( div 在本例中),确认权限后将打开。

打开控制台窗口,刷新页面,您将看到非交互式调用的错误。

演示的工作部分使用一个初始值来显示在子窗口中,然后1.5秒后,父窗口将调用子窗口中的函数child 将更新显示,最后,parent 将访问 child 变量 并直接设置显示。

计时器只是为了清楚地看到发生的变化。

希望这涵盖了您正在尝试做的事情......

parentPage.html:

<html>

<head>
<title>Parent Page</title>
</head>

<body>
<div id="divQuestion" onclick="openChild()">Parent text</div>

<script>
function openChild() {
var parentText = document.getElementById("divQuestion").innerText;
var win = window.open("childPage.html");

// Call a function in the child window...
setTimeout(function () { win.changeValue(parentText) }, 1500);

// Directly use a variable in the child window...
setTimeout(function () { win.childText.innerText = body + " and some more..." }, 3000);
}

// By calling directly you are attempting to open a child window
// without user permission - this will fail.
// openChild();
</script>
</body>

</html>

childPage.html:

<html>

<head>
<title>Child Page</title>
</head>

<body>
<div id="divText">Child text</div>

<script>
var childText = document.getElementById("divText");

function changeValue(val) {
// Take a value from elsewhere (parent window in this case) and update the div
childText.innerText = val;
}
</script>
</body>

</html>

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

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