Arj*_*ngh 270 javascript iframe onclick
我想从iframe调用父窗口JavaScript函数.
<script>
function abc()
{
alert("sss");
}
</script>
<iframe id="myFrame">
<a onclick="abc();" href="#">Call Me</a>
</iframe>
Run Code Online (Sandbox Code Playgroud)
rah*_*hul 425
<a onclick="parent.abc();" href="#" >Call Me </a>
Run Code Online (Sandbox Code Playgroud)
返回对当前窗口或子帧的父级的引用.
如果窗口没有父窗口,则其父属性是对自身的引用.
当在一个被加载的窗口<iframe>
,<object>
或者<frame>
,它的父是与元件嵌入窗口的窗口.
Ash*_*rke 78
我最近不得不找出为什么这也不起作用.
您要从子iframe调用的javascript需要位于父级的头部.如果它在正文中,则脚本在全局范围内不可用.
<head>
<script>
function abc() {
alert("sss");
}
</script>
</head>
<body>
<iframe id="myFrame">
<a onclick="parent.abc();" href="#">Click Me</a>
</iframe>
</body>
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助任何再次遇到这个问题的人.
And*_*kyi 60
此方法可安全地进行cross-origin
通信.
如果您可以访问父页面代码,则可以调用任何父方法,也可以直接从中传递任何数据Iframe
.这是一个小例子:
父页面:
if (window.addEventListener) {
window.addEventListener("message", onMessage, false);
}
else if (window.attachEvent) {
window.attachEvent("onmessage", onMessage, false);
}
function onMessage(event) {
// Check sender origin to be trusted
if (event.origin !== "http://example.com") return;
var data = event.data;
if (typeof(window[data.func]) == "function") {
window[data.func].call(null, data.message);
}
}
// Function to be called from iframe
function parentFunc(message) {
alert(message);
}
Run Code Online (Sandbox Code Playgroud)
iframe代码:
window.parent.postMessage({
'func': 'parentFunc',
'message': 'Message text from iframe.'
}, "*");
// Use target origin instead of *
Run Code Online (Sandbox Code Playgroud)
参考文献:
Ash*_*rke 19
我将此作为单独的答案发布,因为它与我现有的答案无关.
此问题最近再次出现,用于从引用子域的iframe访问父级,并且现有修补程序不起作用.
这次的答案是修改父页面的document.domain和iframe是相同的.这将欺骗相同的原始策略检查,认为它们共存于完全相同的域(子域被视为不同的主机并且未通过相同的原始策略检查).
将以下内容插入<head>
iframe中的页面以匹配父域(根据您的doctype进行调整).
<script>
document.domain = "mydomain.com";
</script>
Run Code Online (Sandbox Code Playgroud)
请注意,这将在localhost开发中引发错误,因此请使用如下所示的检查来避免错误:
if (!window.location.href.match(/localhost/gi)) {
document.domain = "mydomain.com";
}
Run Code Online (Sandbox Code Playgroud)
Vin*_*raj 16
您可以使用
window.top
Run Code Online (Sandbox Code Playgroud)
请参阅以下内容.
<head>
<script>
function abc() {
alert("sss");
}
</script>
</head>
<body>
<iframe id="myFrame">
<a onclick="window.top.abc();" href="#">Click Me</a>
</iframe>
</body>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
398119 次 |
最近记录: |