2010-02-09 4 views
1

Adobe Air에 몇 가지 문제가 있습니다. 내 응용 프로그램에는 다소 복잡한 아키텍처가 있습니다. 기본 HTML 창은 iframe에 javascript에 대한 참조 (예 : DWRengine.js, jquery.js, main.js 등)를로드합니다. 그것은 내 스크립트와 DWR에서 널리 사용되는 'eval'함수에 대한 Air의 javascript 제한을 피하기 위해 수행되었습니다.Adobe Air에서 Iframe의 상단 창에 액세스

main.js 파일에서 주 윈도우의 버튼과 링크에 이벤트 리스너를 추가하려고합니다.

이 같이

:

$(document).ready(function(){ 
    $('body', top.document).click(function(){alert('a');}); 
}); 

을하지만 아무런 효과가 없습니다! top.document은 정의되지 않았습니다.

메인 페이지를로드하는 동안 이벤트를 바인드 할 수 없습니다. 메인 페이지를로드하는 동안 메인 페이지 onload 이벤트 후에 만로드됩니다.

도와주세요.

미리 감사드립니다. Mike.

답변

1

두 개의 서로 다른 샌드 박스에서 작업 중이므로 샌드 박스 브리지를 설정해야합니다. 귀하의 경우에는

당신은 상단 창 물론이 원의

// quoting from the docs 
var interface = {}; 
interface.save = function(text){ 
    var saveFile = air.File("app-storage:/save.txt"); 
    //write text to file 
} 
document.getElementById("yourIframe").contentWindow.parentSandboxBridge = interface; 

'에 따라서 대한 parentSandboxBridge

here are the docs in case you don't have them

를 사용하여 응용 프로그램 샌드 박스의 방법으로 인터페이스에 노출해야합니다 부모님 들께서 도서관을 이용하실 수 있지만 자녀들을 처리하고 부모님 들께서 공기를 다룰 수 있습니다

+0

감사합니다. 그러나 전체적인 문제를 해결하지는 못했습니다. 이제는 라이브러리에서 함수를 호출 할 수 있지만 대부분의 작업은 jquery를 사용하여 요소를 표시하고 숨 깁니다. jquery가로드되고 iframe에서 호출되는 한, 기본 창 문서가 아닌 iframe 문서가 사용됩니다. – Mikhail

+0

하나의 샌드 박스에서 다른 요소를 참조 할 수 없을 것이라고 생각합니다. iframe에 전체 UI가 포함되도록하고 응용 프로그램을 사용하여 상호 도메인 요청 및 파일 시스템 액세스와 같은 공중 작업을 수행하지 마십시오. – meouw

+0

또한 eval() ing은 무엇입니까? 아약스 응답의 JSON 일 뿐이라면 공기가 허용합니다. – meouw

관련 문제