Javascript:从iframe调用父函数

标签 javascript function iframe parent

<分区>

你好 StackOverflow 社区,

我的 <iframe> 有问题和JavaScript。假设我有一个带有 iframe 的 index.html在 body 里。 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>

问题是它没有加载警报并且在 Google Chrome 中返回错误:

"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 调用打开图像函数)。我还使用 target="_parent"属性尝试了这个最终结果。

最佳答案

尝试像这样定义你的函数:

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

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

在浏览器中,javascript 中的所有内容都是 window 对象的子对象。当您以 function funcName() { ... } 形式定义函数时,您实际上是在定义 window 对象的私有(private)方法。这在正常情况下无所谓,因为所有代码都是在window范围内执行的,所以它可以访问这些私有(private)方法。

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

Read this如果您想了解更多关于私有(private)/特权成员(member)及其可访问性的信息。

关于Javascript:从iframe调用父函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7183388/

相关文章:

javascript - 添加包含任何 iframe、wordpress 的 div

javascript - 通过 chrome 扩展在当前页面插入一个按钮,但有些方法不起作用

将一阶传递函数转换为 C 代码

function - dart 如何返回 future

c - 解包函数 12 次深度调用

javascript - getElementById 引用 Null(从 Javascript 调用)

html - 将 .PDF 文件插入 HTML 页面的替代方法

javascript - 全日历保存事件

javascript - 在nodejs中实例化具有变量类名的类对象

javascript - 如何在JavaScript内联属性代码中引用/编写JSP变量?