2013-10-16 98 views
0

在我的flash 4.6 Air項目中,我有幾千個資產文件夾中的html文件,這些文件是由其他軟件生成的。一些html文件有圖像。<img>不能在actionscript中工作

現在爲了保護html文件,我加密了所有這些文件。但是,當我通過他們解密爲一個字符串和負載:

html.htmlLoader.loadString(decryptedString.toString()); 

html.htmlText = decryptedString.toString(); 

的圖像不顯示和空白邊框的盒子與ALT文字顯示。這些html文件有javascript(),它正在工作。 ( 「samople.htm」)的HTML文件的內容是這樣的:

<P>Some Text</P> 
<IMG SRC="../assets/sample/images/image.GIF" ALT="IMAGE.GIF" WIDTH="203"HEIGHT="105"> 
<P>Some Text</P> 

要檢查的工作當我通過加載HTML:

html.location = "/assets/sample/sample.htm"; 

然後,它示出了圖像。但是,當我使用字符串:

html.htmlText = '<p>some text</P><img src="../assets/sample/images/image.GIF" width="203" height="105"><p>some text</p>'; 

然後它不顯示圖像。我試圖從src =「../ assets/...」更改到src =「./ assets/...」或者src =「/ assets/...」或者src =「assets/...」

我的座右銘是確保資產文件夾中的html文件。目前我可以加密/解密它們,但圖像不顯示。

我是新的flex和空氣。預先感謝您的幫助。

編輯

這裏是我的完整的示例代碼: 的Flex/ActionScript中

<?xml version="1.0" encoding="utf-8"?> 
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx" 
         creationComplete="initiate()"> 
    <fx:Script> 
     <![CDATA[ 

      public static var stream:FileStream; 
      public static var stream2:FileStream; 
      public static var file:File; 

      public var readFile:ByteArray; 

      public function initiate():void 
      { 
       file = File.applicationDirectory.resolvePath("assets/sample/sample.htm"); 

       readFile = new ByteArray; 
       stream = new FileStream(); 
       stream.open(file, FileMode.READ); 
       stream.readBytes(readFile); 
       stream.close(); 

       html.htmlText = readFile.toString();//Not showing image. 
      } 
     ]]> 
    </fx:Script> 
    <mx:HTML id="html" left="10" top="10" width="220" height="250"/> 
    <mx:HTML id="html2" left="240" top="10" width="220" height="250" 
      location="assets/sample/sample.htm"/><!--Showing Image--> 
</s:WindowedApplication> 

和HTML:

<HTML> 
<HEAD> 
<TITLE>title</TITLE> 
<SCRIPT LANGUAGE="JavaScript"> 
function someFunction(someValue) 
    { 
     //some code; 
    } 
</SCRIPT> 
</HEAD> 
<BODY> 
<P>This is image</P> 
<P><IMG SRC="/assets/sample/images/myimage.gif" ALT="myimage.gif" WIDTH="203" HEIGHT="105"></P> 
</BODY> 
</HTML> 

myimage.gif位於:資產/採樣/ images/myimage.gif

回答

0

如果您使用http調試器(在firebug/chrome調試器中,使用'net'選項卡),則可以檢出Flash嘗試加載圖像的文件夾。

可能它與.swf文件位置有關,而不是加載的html文件。

+0

我正在使用Flash Builder 4.6與AIR,這是一個Windows應用程序。什麼是重要的是,當我使用** html.location **它正在工作,但是當我將html文件的內容轉換爲字符串時,它不顯示圖像,只有其他所有人都在工作,甚至是JavaScript。 – sonulrk

+0

儘管如此,如果您認爲圖像路徑錯誤,您應該可以使用http調試器進行調試。即使在AIR應用程序中,請嘗試'Charles HTTP調試程序'。 –

+0

圖像路徑是正確的。購買新軟件並使用它會更麻煩。 我重複html.htmlText不工作,但html.location正在工作。 – sonulrk

-1

HtmlText與空氣< img標籤不會工作,無論如何。爲了安全起見,Adobe air將忽略所有的< img標籤。

解決辦法是> spark textflow組件。有一些實用程序可以將htmltext轉換爲文本流格式文本並將其顯示在textflow支持的組件中。

+0

感謝馬克和宙斯的回覆,但我的問題還沒有排序。 我在這些html文件中有javascript,並且有AS <=> JS調用。 現在,我必須將解密文件臨時保存在用戶硬盤上,並使用所有圖像,然後使用正在工作的「.location」屬性。 – sonulrk

+0

是否有任何其他方式在AIR中使用多個帶有圖像和JavaScript的html文件。提前致謝。 – sonulrk

+0

text.htmlText屬性不完全支持html標籤,如果您必須顯示html文件,那麼您必須使用 Zeus

1

Zeus正確地說htmlText屬性並不完全支持AIR中的安全原因。因此,當我們通過字符串放置html內容時,容器不在Application Sandbox中(默認值:false)。但是如果你確定html字符串中的外部內容是可信的,那麼你必須設置htmlLoader。placeLoadStringContentInApplicationSandbox爲true。