获取当前浏览器URL - ActionScript 3

11

我想获取当前浏览器的URL。我已经尝试使用外部调用,但失败了。而使用loaderInfo.url,则会接收到当前SWF的URL。

6个回答

15

请试一试这个:

import flash.external.ExternalInterface;

var url:String = ExternalInterface.call("window.location.href.toString");
if (url) textfield.text = url;

应该就能解决问题了。


有趣的事情是,你可以在ActionScript中编写JavaScript而无需使用HTML。 - atilkan
toString是做什么用的?这是Flash添加的函数吗? - Eddie

2
有几种方法可以解决这个问题,但所有方法都涉及使用JavaScript直接查询浏览器。
我喜欢的解决方法是通过flashVar属性直接从嵌入代码中提供URL(个人建议使用SWFObject使此过程更容易);别忘了你需要对它进行URL编码以避免标记问题。
var flashvars = {
  browserURL: escape(location.href)
};
swfobject.embedSWF("myContent.swf", "myContent", "300", "120", "9.0.0", "expressInstall.swf", flashvars);

现在,您将能够通过loaderInfo对象访问浏览器URL:
trace(stage.loaderInfo.parameters["browserURL"]);

请注意,只有当您控制生成 SWF 文件的 HTML 时,此方法才有效。如果用户将抓取 SWF 并编写自己的嵌入式 HTML,则此方法无效。
如果您无法控制 Flash 嵌入式 HTML,则需要使用 ExternalInterface 类在运行时查询浏览器。其他人建议使用 "window.location.href.toString",但这可能在 IE6 上存在问题。我发现以下方法可靠地适用于所有浏览器。
const browserURL : String = ExternalInterface.call("eval", "window.location.href");

请注意,为了使其正常工作,您需要授予 JavaScript 访问 Flash 影片的权限,这是通过 HTML 嵌入代码和 allowScriptAccess param 完成的。

2
var url:String = loaderInfo.loaderURL;

似乎也能正常工作。

1

我建议尝试将所需信息作为flashvar传递。虽然这不是最好的开箱即用解决方案,但它可以工作。

Flash: AS3中的FlashVars


这种技术唯一的问题是Flash会将某些URL拆分成单独的变量。这种情况发生在GET URL中,例如:*.com?one=1&two=2。所以请记住这一点! - Tyler Egeto
@TylerEgeto,您可以通过使用HTML特殊字符编码来修复它。 - Tchakabam

0

我已经使用Flash很长时间了,但从未注意到这一点。它只提供域名以确保安全性。它也可以通过加载的SWF文件正常工作。不确定关于IFrame。

Security.pageDomain

0

我认为可以使用外部接口并使用JavaScript window.location 来实现它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接