0

在我的 flash 4.6 Air 项目中,我在 assets 文件夹中有数千个 html 文件,这些文件是从其他一些软件生成的。一些带有图像的 html 文件。

现在为了保护 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/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 位于:assets/sample/images/myimage.gif

4

3 回答 3

1

Zeus 正确地说 htmlText 属性不完全支持主要是出于 AIR 中的安全原因。因此,当我们通过字符串放置 html 内容时,容器不在应用程序沙箱中(默认值:false)。但是,如果您确定 html 字符串中的外部内容是可信的,那么您必须将 htmlLoader.placeLoadStringContentInApplicationSandbox 设置为 true。

于 2013-10-18T06:06:46.303 回答
0

如果您使用 http 调试器(在 firebug/chrome 调试器中,使用“net”选项卡),您可以检查 Flash 尝试从哪个文件夹加载图像。

可能它与 .swf 文件位置有关,而不是与加载的 html 文件有关。

于 2013-10-16T07:44:16.110 回答
-1

无论如何,带有 <img 标签的空气的 HtmlText 都不起作用。出于安全目的,Adobe air 将忽略所有 <img 标签。

解决方法是 > spark textflow 组件。有一些实用程序可以将 htmltext 转换为文本流格式文本并将其显示在文本流支持的组件中。

于 2013-10-16T21:44:03.520 回答