我有一个HTML页面,其中包含一个按钮,显示“打开弹出窗口”。点击此按钮后,会打开一个弹出窗口(使用window.open
)。
新的弹出窗口是一个包含简单输入字段和提交按钮的HTML页面。点击提交按钮后,弹出窗口应该关闭,刚才在输入框中输入的文本现在应显示在父窗口中。
我尝试过使用它opener.document.getElementById
。它适用于Firefox,但不适用于Chrome。
这是我的父页面(parent.html
)的代码:
<!DOCTYPE html>
<html>
<body>
<button type="button" onclick="openPopup()">Open Popup</button>
<p id="result"></p>
<script type="text/javascript">
function openPopup() {
var popupWindow = window.open('popup.html', '', 'width=300, height=200');
}
</script>
</body>
</html>
这是我的popup(popup.html
)的代码:
<!DOCTYPE html>
<html>
<body>
<input type="text" id="userText" placeholder="Please enter some text">
<button type="button" onclick="submitText()">Submit!</button>
<script type="text/javascript">
function submitText() {
opener.document.getElementById('result').innerHTML = 'The text you\'ve entered is: ' + document.getElementById('userText').value;
self.close();
}
</script>
</body>
</html>
注意:父级和弹出文件都位于我的桌面上。 如上所述,它可以在Firefox中使用,但不适用于Chrome。当我点击“提交!” 按钮在Chrome中,没有任何反应,并且在控制台中显示以下错误:
未捕获的DOMException:阻止源“null”访问跨源帧的帧。
我花了几个小时尝试在线寻找帮助,但我仍然无法使Chrome从弹出窗口向父页面传递数据(这两者都是,如前所述,这些位于我的桌面,即位于同一目录中)。
发布于 2018-06-14 11:20:37
你遇到的问题是Chrome的安全功能,该功能正在应用名为CORS(跨源请求规范)的Web安全标准。这是为了防止一个网站访问另一个网站(因为这是一种常见的技巧,试图欺骗人们放弃个人信息),除非这两个网页来源于同一个域。例如,默认情况下,http://domainA.com应该无法与http://domainB.com进行通信。在这种情况下,这是一个合理的需求,服务器配置是必需的。
由于你正在桌面上运行测试(没有Web服务器),因此没有域信息存在,Chrome认为你正在创建跨源请求。
如果你从Web服务器运行文件(通过http或https),它将起作用。
有许多免费的Web服务器可供你在本地计算机上设置,并且许多开发工具都包含自己的Web服务器。例如,VS代码和Visual Studio都是免费的,并且包含Web服务器。
https://stackoverflow.com/questions/-100008673
复制相似问题