0

iframe 内から2 つの関数setListener();を呼び出そうとしています。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() { };) で親の関数を再宣言するまで、オンラインで見つけることができるすべてのソリューションを試しました。

アドバイスをいただければ幸いです。

ありがとう

更新: いくつかのデバッグの後、呼び出しが機能しない理由は、実行がそれらの 1 行前で停止するためであると思われます。どういうわけかこの行「$(".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 に答える