2016-04-28 15 views
1

iframeで呼び出されているhtmlファイル内にjsファイルが含まれています。私は、iframeの内側で呼び出されたjsの実行をiframeの外側で宣言されたjquery関数で置き換えるjquery関数を探しています。iframe内のjquery関数を停止する方法

たとえば、iframeにメニューがあり、パラレルエフェクトのあるセクションにスライドします。私は単純にjQuery関数をスライドにリンクして、iframe内のjsファイルの中で宣言されていないはずです。

次のHTMLコードを言うことができますが、インラインフレームの内側にある:

$('.navbar-collapse ul li a').click(function() { 
    $('html, body').animate({ 
     scrollTop: $(this.hash).offset().top - 79 
    }, 1000); 
    return false; 
}); 

は今、私は、これは編集モードになりたい:

<div class="collapse navbar-collapse"> 
    <ul class="nav navbar-nav navbar-right" id="nitsmenu" data-nitspagelabel="1"> 
     <li class="scroll active"><a href="#navigation">Home</a></li> 
     <li class="scroll"><a href="#aboutus">About Us</a></li> 
     <li class="scroll"><a href="#services">Services</a></li> 
     <li class="scroll"><a href="#ourteam">Our Team</a></li> 
     <li class="scroll"><a href="#portfolio">Portfolio</a></li> 
     <li class="scroll"><a href="#clients">Clients</a></li> 
     <li class="scroll"><a href="#blog">Blog</a></li> 
     <li class="scroll"><a href="#contact">Contact</a></li> 
    </ul> 
</div> 

今では、次のコードを持っているmain.jsファイルを持っていますユーザーがulセクションをクリックすると、メニューの順序を編集したり削除したり追加するボタンが表示されます。私はmain.jsで使用される機能を使用して停止したい

$('#nitseditpreview').load(function() { //The function below executes once the iframe has finished loading 
    var menu = $(this).contents().find('#nitsmenu'); 
    all_li = $(this).contents().find('ul#nitsmenu > li'); 
    $(all_li).find("a").removeAttr("href"); 
    $(all_li).find("a").css({ 
     'color': '#000' 
     , 'background-color': 'none' 
    }); 
    menu.hover(function (event) { 
     $(this).css('border', 'solid 2px #8080ff'); 
    }, function() { 
     $(this).css('border', 'none'); 
    }); 
    $(this).click(function (e) { 
     stop(); // where this prevents default or stops the event called in main page of js 
     //....executes the function.... 
    }); 
}); 

:私は親editor.jsファイルで次の手順を試してみました。しかし、iframeの外側にあるときは、main.jsファイルが再度必要です。

+0

内側フレームと外側フレームは同じドメインにありますか? – CherryDT

+0

はい私はルールに従っています。 –

+0

その場合、 'window.parent.myFunction'(あるいは' window.parent。$(...) 'を使って内側のフレームの関数にアクセスできますが、これが良いかどうかは分かりません) (またはIFrameをjQueryオブジェクトとして持っている場合は、 '$ myIframe.get(0).contentWindow.myFunction')を使用してラウンドします。したがって、何かを置き換える代わりに、内部フレームに外部フレームの関数を呼び出させることができます。しかし、それはまだ私には少し奇妙に聞こえるし、より良いアーキテクチャがあるのだろうか?あなたのユースケースをもう少し説明できますか? – CherryDT

答えて

1

編集者とプレビューを同じフレームに入れることができないというコメントを述べているので、編集中で何をするべきかを内部フレームに伝えることをお勧めします例えば、外部から一定のフラグをセットすることによって行われる。

これは(外枠に)次のようなコードを使用して達成することができる。

$('#nitseditpreview').get(0).contentWindow.myDebugMode = true; 

そして、インナーフレームはちょうどフラグがアニメーションを無効にするために設定されているかどうかを確認するためにif(window.myDebugMode)をチェックする必要があります、 例えば。

関連する問題