0

我正在尝试从 iframe 中setListener();调用2 个函数。addNewBox();

我到处寻找并尝试了一切,但我无法让它工作。

我无法访问父级的头部,因为它是通过 php require 分块构建的。

这是父文件外观的粗略模型。

<head>
<?php require "head.html" ?>
</head>
<body>
<?php require "content.html" ?>
</body>

content.html 样机:

<!-- a bunch of boring divs -->
<iframe src="image_editor.html"></iframe>
<script> /* random ajax */ </script>
<script>
$(document).ready(function(e) {
    //init
    setListener();
    addNewBox();

    function setListener()
    {
            //MAGIC HAPPENS
        }

        function addNewBox()
    {
            //GREATER MAGIC HAPPENS
        }
}
</script>

image_editor.html 样机:

<body>
<form id="image_form">
<input type="submit" value="Submit"/>
</form>
<script>
$(document).ready(function(e) {
    $("#image_form").submit(function(e) {
            //MAGIC HAPPENS HERE

            //re-adds listeners
            window.parent.addNewBox();
            window.parent.setListener();
        }
</script>
</body>

我已经尝试了我可以在网上找到的所有解决方案,从使用 top 到以公共格式(window.myFunction = function() { };)重新声明 parent 中的函数。

我会很感激任何建议。

谢谢

更新:经过一些调试后,调用不起作用的原因似乎是因为执行在它们之前停止了一行。不知何故,这一行 "$(".new", window.parent.document).remove();" 打破一切。我现在必须弄清楚那个。我感谢您的所有帮助。

4

2 回答 2

0

发生这种情况至少是因为setListener()并且addNewBox()不在window.parent. 要解决此问题,您需要将它们移出$(document).ready(function(e) {...}()).

于 2013-06-11T14:47:41.857 回答
0

这是因为他们在$(document).ready(function(){});

你可以像这样修复它:

$(window.parent).bind(setListener);
$(window.parent).bind(addNewBox);

希望能帮助到你!

于 2013-06-11T14:53:06.900 回答