2010-07-29 71 views
1

我正在開發一個iFrame Facebook應用程序。 iFrame有一個swf。我們需要通過javascript訪問swf。在iFrame中使用「窗口」和「文檔」

這個iFrame有一個swf需要放在一個Javascript變量中,以便我們可以調用ExternalInterface函數。

現在,我們的「flash」變量未定義,因爲我們似乎無法訪問該iFrame的元素,因爲這引發了沙箱安全警告,因爲以這種方式喚起窗口或文檔意味着我們正在訪問此內容從父母的網站,這是Facebook。

眼下,我們正在做這樣的事情:

if(navigator.appName.indexOf("Microsoft") != -1) 
{ 
    flash = window["swfr"]; 
} 
else 
{ 
    flash = document["swfr"]; 
    } 

我敢肯定有一種方法,使這項工作,但不幸的是,我只是沒有看到它。我感謝任何幫助。

回答

0
+0

運行的應用程序的獨立作品 - 一切工作像它應該。只有在源文件在iFrame中的情況下,所有的內容都會中斷,儘管我會給基督徒建議的一個嘗試。 – 2010-07-29 21:59:20

0

子iframe頁面具有對父級的引用,而不是其他方式。所以你應該能夠給出一個反向引用,然後用它來操縱你的flash對象。此博客顯示瞭如何調用父函數(傳遞閃光OBJ作爲參考):http://www.velocityreviews.com/forums/t164727-a-challenge-call-parent-javascript-function-from-inside-an-iframe.html

父頁面:

function ManipulateFlashObj(obj) 
{ 
alert(obj); 
} 

孩子(IFRAME頁):

parent.ManipulateFlashObj(document.getElementById("swf")); 
+0

所以我不能從iFrame本身操作iFrame的元素,我必須使用對父級的引用來做到這一點? – 2010-07-29 22:06:52

0

如果父頁面和iframe頁面位於不同的DNS域中,瀏覽器將不允許父級查看子級上下文,也不允許子級查看父級上下文。要在父級和子級之間移動數據,您需要使用跨域腳本技術(XSS),例如在iframe網址上傳遞數據。

0

如果腳本在IFrame內,它應該可以工作,因爲IFrame將具有與SWF文件相同的域。但是,如果iframe是通過某個Facebook網址提供的,則必須在爲SWF提供服務的主機上創建/更新cross-domain.xml文件。

此外,請嘗試swfObject,因爲它具有更廣泛的瀏覽器兼容性,甚至可以在Flash Builder 4中使用自動生成的html模板。

http://code.google.com/p/swfobject/