在通过浏览器发送之前强制 SWF 在服务器的本地驱动程序中加载文件

Forcing SWF to load file in local driver of server before sending over browser

我正在构建一个 Flash 应用程序,它需要使用 URLLoader 加载 xml 文件。在使用 Flash Professional 在我的本地计算机上开发应用程序时,我可以通过

轻松加载它
        private var myLoader:URLLoader = new URLLoader(new URLRequest("./com/assets/config.xml"));

当我发布应用程序并单击生成的 html 时,应用程序在浏览器上完美加载。

如果我创建的服务器 (localhost:1111) 在连接时通过浏览器传送 html 文件,html 文件不会加载应用程序 (.swf)。

在尝试调试时,我发现如果我如下更改 myLoader 变量,html 文件会正确加载 swf。

    private var myLoader:URLLoader = new URLLoader(new URLRequest("http://localhost:1111/com/assets/config.xml"));

我相信 SWF 在 html 加载到我的浏览器后发出另一个 GET 请求,这就是 SWF 在没有更改的情况下无法工作的原因。

有什么方法可以在 xml 文件通过浏览器传送之前将其加载到 SWF 文件中。这是为了避免再次调用服务器。感谢任何帮助澄清我的理解和解决方法的建议。

如果您想上传您的 SWF 文件并让用户访问配置 XML,您需要将 XML 托管在您的用户可以访问的地方。你的本地机器 (localhost:1111) 除了你自己之外任何人都无法访问(除了在用户机器上调整的一些不寻常的主机)。

当您设置托管和 Web 服务器以实际通过 HTTP 提供文件时,您需要做一些事情:

  1. 在服务器上设置 crossdomain file 以定义允许哪些主机加载您的配置 XML。
  2. 修改您的应用程序以从服务器加载数据,例如new URLRequest('http://your_domain_or_ip/config.xml').

您不能将对 XML 文件的引用保留为相对文件的原因 ./com/assets/config.xml 是因为 SWF 只会在正在查看时通过本地文件系统加载文件作为文件系统中的文件与浏览器中的文件。

当 SWF 运行时,您创建的 URLLoader 实例将执行 HTTP GET 以加载您的 XML 文件。

如果您想避免执行额外的 GET 请求来获取 XML,您必须使用 [Embed] 元标记将配置编译到 SWF 本身。