Javascript:从iframe调用父级函数

参见英文答案 > Calling a parent window function from an iframe                                    10个
Hello StackOverflow社区,

我的< iframe>有问题和JavaScript.假设我有一个带有iframe的index.html.在index.html中,我在< head>中有这个.标签

<script type="text/javascript">
    function alerttest() {
        alert("Testing");
    }
</script>

在iframe的src =“iframe.htm”(该位置与index.html相同).在iframe.htm页面中,我有

<a href="javascript:void(0);" onclick="window.parent.alerttest();">Click here.</a>

问题是它没有加载提醒,并且在谷歌浏览器中返回错误

“Uncaught TypeError: Property ‘alertTest’ of object [object DOMWindow] is not a function

我试过window.parent.alerttest();,window.top.alerttest();,top.alerttest();,parent.alerttest();几乎所有关于我搜索过的类似问题的东西.

您似乎无法从位于所述非iframe内的iframe调用位于非iframe中的函数.

请帮忙!

附:基本上在实际的最终结果中我试图调用一个LightBox打开图像功能(使用slimBox因为我能够用javascript而不是从href调用open image函数).我还使用target =“_ parent”属性尝试了这个最终结果.

解决方法

尝试像这样定义你的函数

window.alertTest = function () {
  alert("Testing");
};

……并以与问题相同的方式调用它;-)

在浏览器中,javascript中的所有内容都是窗口对象的子代.在函数funcName(){…}中定义函数时,您正在有效地定义窗口对象的私有方法.这在正常情况下无关紧要,因为所有代码都在窗口范围内执行,因此它可以访问这些私有方法.

但是当您尝试从外部访问窗口对象(即另一个窗口对象,即iframe的窗口对象)时,您将无法访问它.如果在窗体window.funcName = function(){…}中定义函数;您正在创建一个特权方法,可以从外部访问,但也可以访问私有方法属性(即脚本中的变量),因此当您尝试从iframe调用它时它将起作用.

Read this如果您想了解更多有关私人/特权成员及其可访问性的信息.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...