2011-05-25 25 views
0

我有這樣的代碼,應該從遠程服務器拉縮圖像,並將其返回到Flex中顯示。不幸的是我的代碼拋出了「沒有活動的安全上下文」錯誤。即使使用setTimeout技巧,「沒有活動的安全上下文」錯誤?

搜索後,我看到一個setTimeout的技巧,它應該解決這個問題,但它不適用於我。我究竟做錯了什麼?

這裏是代碼在Flex的4.0(注:文件是一個自定義類)

public function getThumbnail(file:File, callBack:Function):void 
{ 
    // only for image files 
    if (file.mimeType.indexOf("image") > -1) { 
    var loader:Loader = new Loader(); 
    // create request 
    var urlVars:URLVariables = new URLVariables(); 
    urlVars.id = file.id; 
    var req:URLRequest = new URLRequest(THUMBNAIL_URL); 
    req.data = urlVars; 
    setTimeout(
     function():void { 
     loader.load(req); 
     }, 1); 
    // set load handler 
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, 
     function(event:Event):void 
     { 
     var thumbnail:Image = new Image(); 
     thumbnail.source = event.currentTarget.content; 
     callBack(thumbnail); 
     }); 
    } 
} 

更新我把這個在我的application.mxml

Security.allowDomain("*"); 
Security.allowInsecureDomain("*"); 
Security.loadPolicyFile("http://localhost:8080/crossdomain.xml"); 

我修改了代碼,在我動作腳本文件到

public function getThumbnail(file:File, callBack:Function):void 
{ 
    // only for image files 
    if (file.mimeType.indexOf("image") > -1) { 
    var loader:Loader = new Loader(); 
    // create request 
    var urlVars:URLVariables = new URLVariables(); 
    urlVars.id = file.id; 
    var req:URLRequest = new URLRequest(THUMBNAIL_URL); 
    req.data = urlVars; 
    var context:LoaderContext = new LoaderContext(true); 
    loader.load(req); 
    // set load handler 
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, 
     function(event:Event):void 
     { 
     var thumbnail:Image = new Image(); 
     thumbnail.source = event.currentTarget.content; 
     callBack(thumbnail); 
     }); 
    } 
} 

我不得不在我的J2EE後端修改我的server.xml以使crossdomain.xml顯示在根部。

我crossdomain.xml的是這樣的:

<?xml version="1.0"?> 

<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> 

<cross-domain-policy> 

    <!--This domain can accept the SOAPAction header from a SWF file from www.example.com --> 

    <site-control permitted-cross-domain-policies="all" /> 

    <allow-access-from domain="*" secure="false" /> 

    <allow-http-request-headers-from 
     domain="*" headers="SOAPAction" /> 

</cross-domain-policy> 

我仍然得到「沒有活動的安全上下文」的錯誤在Firefox的Flash Player的調試版本。

回答

1

我找不到鏈接了,但有一個版本的錯誤具有調試功能的Flash 10.2。我最近使用調試器升級到了10.3版,並且不再出現此錯誤。

+0

爲我工作 - 做Flex時,總是會出現這些不起眼的錯誤信息,grrrrh! – SteveD 2011-09-22 12:37:51

1

這可能就像從您要從中縮略圖的網站加載跨域策略一樣簡單。

Security.allowDomain("*"); 
Security.allowInsecureDomain("*"); 
Security.loadPolicyFile("http://domain.com/crossdomain.xml"); 
+0

謝謝,我也試過,但它告訴我「錯誤:由於元策略'master-only',忽略http:// localhost:8080/springMVCServlet/crossdomain.xml中的策略文件。」 – 2011-05-26 15:08:06

+0

奇怪的是,試試一個實際的域名(不是本地主機),看看是否有效。 – Marty 2011-05-26 22:09:29

+0

好的,所以我最終修復了crossdomain.xml的問題。我必須更改server.xml的配置,以便我的應用程序顯示在localhost:8080 /中,以便crossdomain.xml將顯示在根目錄中。不幸的是,我仍然有「沒有活動的安全上下文」錯誤。 – 2011-05-27 19:33:43

2

如果我沒有記錯(安全策略在Flash中有點困難),Loader類在加載圖像時不會檢查CrossDomain策略文件。您可以指示它通過傳遞自己LoaderContext實例loader.load()這樣做,例如:

loader.load(urlRequest, new LoaderContext(true)); 

我不認爲你需要在你的代碼中使用setTimeout;我沒有聽說過這種做法,我不知道它會實現什麼(除了延遲1毫秒的負載呼叫:)

+0

我看到這個地方,我將它添加到我的代碼,但它沒有解決它。 – 2011-05-26 13:55:53

相關問題