您能否提供一个适合您的 URL 示例?
我相信 Ebay 专门阻止来自其他域的 Flash 应用程序使用它们的图像。
URL 编码不是问题...... Flash 只是依靠浏览器来下载它们。但是,看看隐藏在BitmapImage
组件内部的这段代码(这是 SparkImage
组件使用的底层代码):
BitmapImage::loadExternal()(第 1513 行)
try
{
loaderContext.checkPolicyFile = true;
var urlRequest:URLRequest = source is URLRequest ?
source as URLRequest : new URLRequest(source as String);
loader.load(urlRequest, loaderContext);
}
这里它告诉Loader
它它将用来获取图像以检查源域的 crossdomain.xml 文件。这是该 crossdomain.xml 文件的链接。
他们的 crossdomain.xml 文件专门允许来自各种 ebay 域的 Flash 应用程序访问 i.ebayimage.com 上的内容。我刚刚扫描了它,但我没有看到任何允许使用通配符 ( allow-access-from domain="*"
) 的内容,因此允许使用非 ebay 域。因此,除非 ebay 允许,否则您将永远无法在 Flash 应用程序中使用这些图像。
[编辑]
在您执行以下任一操作之前,您可能应该确定您正在做的事情的合法性。
实际上,我收回了这一点。您将永远无法使用 FlexImage
或BitmapImage
组件来加载这些图像,因为这些组件会检查策略文件。但是,您有几个选择:
- 扩展
BitmapImage
类并覆盖loadExternal()
方法,使其不检查策略文件
- 使用您自己的
Loader
来显示图像。这在 Flex 应用程序中需要做更多的工作,但它可以工作(我刚刚用一个简单的 AS3 应用程序对其进行了测试)。
这是我测试过的非常基本的 AS3 应用程序(不使用 Flex):
package
{
import flash.display.Loader;
import flash.display.Sprite;
import flash.net.URLRequest;
public class As3Project extends Sprite
{
private var loader:Loader;
function As3Project()
{
loader=new Loader();
var url:URLRequest = new URLRequest("http://i.ebayimg.com/00/s/MTA2MlgxNjAw/%24T2eC16JHJG%21E9nm3pkoZBQDVSKHsow%7E%7E60_1.JPG?set_id=880000500F");
loader.load(url);
addChild(loader);
}
}
}