我正在用AdobeAIR构建一个应用程序,其中包含一个<code>mx:HTML</code>的浏览组件。此浏览器将用于加载外部内容(可公开访问的URL,如http://google.com),在外部内容加载后,我将CSS和JS注入HTMLLoader,为我的应用程序提供其他UI组件。
那部分工作得很好。我的JS代码由WebKit执行;WebKit使用我的CSS规则。对于我使用CSS和JS创建的UI组件,我希望使用一些图像。到目前为止,我已经通过数据URI方案,但这迫使我在资产/文件夹中制作图像的base64编码副本(添加到CSS规则中)。
我希望能够用HTMLLoader加载外部URL,然后添加CSS、JS和Images,在同一个HTMLLoader中创建UI组件。我知道HTMLLoader属性placeLoadStringContentInApplicationSandbox,但如果这是我将用于将本地图像从我的资产/加载到HTMLLoader中的,IMG标记的HTML内容会是什么样子,即如何引用图像?
关于如何将本地图像加载到HTMLLoader对象的内容中,还有其他想法吗?
更新
我尝试了第一个评论员的想法,使用src=“app://path/to/image.png”,但没有成功。
以下是我所做的:
<mx:HTML id="browser"/>
<fx:Script>
<![CDATA[
browser.addEventListener(Event.COMPLETE,browserEventCompleteHandler);
browser.htmlLoader.placeLoadStringContentInApplicationSandbox = true; // have set to true and false with no difference.
....initiate browser load....
private function browserEventCompleteHandler(event:Event):void
{
var img:* = browser.domWindow.document.createElement( IMG );
img.src = "app:/assets/arrow_refresh.png";
img.width="300";
img.height="300";
browser.domWindow.document.getElementsByTagName( body )[0].appendChild(img);
}
]]>
</fx:Script>
运行上面的代码,我看到IMG元素被添加到了宽度和高度为300px的外部内容中,但PNG图像本身并不呈现。只需为IMG元素看到一个300像素的空正方形。
最终更新
The answer solved my problem, but with one change. I used File and FileStream classes instead of URLRequest to load the png. 以下是我所做的:
var f:File = File.applicationDirectory.resolvePath("app:/assets/arrow_refresh.png");
var s:FileStream = new FileStream();
s.open(f, flash.filesystem.FileMode.READ);
var data:ByteArray = new ByteArray();
s.readBytes(data,0,s.bytesAvailable);
var b64Encoder : Base64Encoder = new Base64Encoder;
b64Encoder.encodeBytes(data);