2011-02-03 1 views
1

Iframeを使用してコンテンツを読み込むWindows 7ガジェットを作成しています.Iframeのコンテンツを完全に制御できますこのIframe内から親(Windows 7ガジェットhtmlドキュメント)内の関数を呼び出したり、Iframe内からフライアウトをトリガーしたりすることができます。
ご協力いただきまして誠にありがとうございます。 Windowsデスクトップガジェットが最初にSame Origin Policyの制限から除外されると言われていたが
おかげ
enter image description hereWindows 7ガジェットに埋め込まれたIframe内から親DOM /関数にアクセスする

答えて

2

は、それがのXMLHttpRequestsの唯一の真のです。 がwww上のページを指している場合、フレーム付きページとホスティングガジェット間の通信はすべてブロックされます。この場合、は、最上位ウィンドウのhashの変更に依存するドメイン間通信の方法を使用できる可能性があります。 、そして、

window.top.location.hash = "#ShowFlyout"; 

あなたはこのようなものがあるだろうガジェットのコードに::フレームの内側から、あなたはこのような何かをするだろう

window.setInterval(function() { 
    if (window.location.hash == "#ShowFlyout") { 
     window.location.hash = ""; 

     System.Gadget.Flyout.file = "flyout.htm"; 
     System.Gadget.Flyout.show = true; 
    } 
}, 100); 

を私は私のWindowsマシンを持っていませんそれでもすぐにテストすることができますが、やはり試してみることができます。 IFRAMEは、ローカルマシン上のHTML文書を指している場合、あなたはこのようなガジェット—で最上位のウィンドウオブジェクト—の一員としてグローバルSystem変数にアクセスすることができるはず

var System = window.top.System; 
System.Gadget.Flyout.file = "some.htm"; 
System.Gadget.Flyout.show = true; 

か、またあなたがフライアウトのコンテンツを管理していると仮定すると、あなたは(あなたがそれをタグ付けするので)jQueryを使ってすべてのリンクにイベントハンドラを設定できます

$("a", iframe.contentWindow.document).click(function() { 
    System.Gadget.Flyout.file = this.href; 
    System.Gadget.Flyout.show = true; 
}); 
+0

逆は同じで行うことができます。ソメティiframe内のリンクにイベントリスナーを使用し、このiframe内のリンク内のユーザーインタラクションのメソッドをトリガーしますか? – Neeraj

+0

@Neeraj:確かに、私はポストを例文で更新しました。 –

+0

何か問題があるようですが、次のようにしてみました:$( "a"、iframe.contentWindow).click(function(){ $(this).css( "background"、 "red"); } ); 何も(iframe.Iも$( "A"、のdocument.getElementById( "InoutIframe")。contentWindow).live( "マウスオーバー"、機能(){ \t \t \t \t \t $を試した中で何にも起きていないようにみえこの)の.css( "背景"、 "赤"); \t \t \t \t \t \t \t \t \t});、IFRAMEのIDは、InoutIframeあるbefore.Anyのアイデアと同じ結果は、私が間違って何をやっていますか? – Neeraj