【发布时间】:2020-05-03 20:32:00
【问题描述】:
我正在尝试选择此 iframe 预订表单中的电子邮件字段。我最终想对该字段做其他事情,但现在作为测试,我只想选择元素并更改占位符。
收到此错误,所以我没有正确选择它: 未捕获的类型错误:无法在 HTMLButtonElement.changeCopy 处设置 null 的属性“占位符”
您可以在此处查看我的代码的实时版本,并在单击顶部按钮时在控制台中查看错误:https://finnpegler.github.io/cart_recover/
我还在下面将代码作为 sn-p 包含在内,但它会引发与跨源帧有关的不同错误。
var iframe = document.getElementById("booking-widget-iframe");
var field = iframe.contentWindow.document.querySelector("booking[email]");
function changeCopy() {
field.placeholder = "hello";
}
document.getElementById("button").addEventListener("click", changeCopy)
<!DOCTYPE html>
<html lang="en">
<head>
<title>Test site for Cart Recover Tool</title>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" media="screen" href="stylesheet.css" />
<link href="https://fonts.googleapis.com/css?family=Bree+Serif|Open+Sans&display=swap" rel="stylesheet">
<link rel="icon" href="favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
Clicking this button should change the placeholder text in the email field below
<button id = "button">Click</button>
</body>
<script src="https://bettercleans.launch27.com/jsbundle"></script><iframe id="booking-widget-iframe" src="https://bettercleans.launch27.com/?w_cleaning" style="border:none;width:100%;min-height:2739px;overflow:hidden" scrolling="no"></iframe>
<script src="script.js"></script>
【问题讨论】:
-
浏览器将阻止父框架试图操纵子框架的内容或结构,如果它们不是同源,即不同域。在您的情况下,父框架来源是 finnpegler.github.io 但子框架来源是 bettercleans.launch27.com。如果您可以访问 bettercleans.launch27.com 的 js 源代码,您可以尝试通过向子框架发布消息来解决它。看看这篇 SO 帖子是否对您有帮助 stackoverflow.com/questions/25098021/…
标签: javascript dom iframe