[AS3]AS3.0flash做域名限制跨域限制实现域名判断
[AS3]AS3.0flash做域名限制跨域限制实现域名判断,以前在给游戏加sitelock时,都是使用 loaderInfo.loaderURL 或者 root.loaderInfo.url 的方式来获取swf的url,然后进行判断
问题描述
以前在给游戏加sitelock时,都是使用 loaderInfo.loaderURL 或者 root.loaderInfo.url 的方式来获取swf的url,然后进行判断,虽然可以防止swf在别的域名下运行,但别的域名可以通过在页面中直接引用swf来在页面中进行显示。
解决方案
使用 ExternalInterface.call 来执行一段js代码,获取swf所在页面的url,如果swf的url和页面的url都处在同一个域,那么 ExternalInterface.call就可以正常获取页面的url,否则会返回空,从而结合之前的方法共同验证就可以保证swf文件既不会在别的 域名下运行,也不会在别的域名下被引用运行。 代码如下:
- private function checkDomain():Boolean
- {
- var url:String = loaderInfo.loaderURL;
- var weburl:String;
- try
- {
- weburl = ExternalInterface.call("function getUrl(){return window.location.href;}");
- }
- catch (e:Error)
- {
- weburl = "";
- }
- // 允许运行的域名列表,使用|分隔
- var allowedDomains:String = ".*cuplayer.com|.*dev.local";
- var allowedPattern:String = "^http(|s)://("+allowedDomains+")/";
- var domainCheck:RegExp = new RegExp(allowedPattern, "i");
- if (weburl != "")
- {
- if (!domainCheck.test(url) && !domainCheck.test(weburl))
- {
- showInfo();
- return false;
- }
- }
- else
- {
- showInfo();
- return false;
- }
- return true;
- }
- private function showInfo():void
- {
- var textWarning:TextField = new TextField();
- textWarning.defaultTextFormat = new TextFormat("Tahoma", 24, 0x333333);
- textWarning.selectable = false;
- textWarning.multiline = true;
- textWarning.autoSize = "center";
- textWarning.x = 300;
- textWarning.y = 100;
- addChild(textWarning);
- textWarning.htmlText = '<p align="center"><br />
<br />Please play this game at
<a target="_blank" href="http://CuPlayer.com">
<font color="#CC0000">CuPlayer.com</font></a>.</p>';- }
然后在preloader中所有动作的前面调用如下代码,即可生效:
- if (!checkDomain())
- return;
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例
请稍候...