·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[AS3]AS3.0flash做域名限制跨域限制实现域名判断

时间:2014-03-31 21:48cuplayer.com
[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文件既不会在别的 域名下运行,也不会在别的域名下被引用运行。 代码如下:

  1. private function checkDomain():Boolean 
  2.   var url:String = loaderInfo.loaderURL; 
  3.   var weburl:String; 
  4.   try  
  5.   { 
  6.     weburl = ExternalInterface.call("function getUrl(){return window.location.href;}"); 
  7.   } 
  8.   catch (e:Error) 
  9.   { 
  10.     weburl = ""
  11.   } 
  12.   // 允许运行的域名列表,使用|分隔 
  13.   var allowedDomains:String = ".*cuplayer.com|.*dev.local"
  14.   var allowedPattern:String = "^http(|s)://("+allowedDomains+")/"; 
  15.   var domainCheck:RegExp = new RegExp(allowedPattern, "i"); 
  16.  
  17.   if (weburl != "") 
  18.   { 
  19.     if (!domainCheck.test(url) && !domainCheck.test(weburl)) 
  20.     { 
  21.       showInfo(); 
  22.       return false; 
  23.     } 
  24.   } 
  25.   else 
  26.   { 
  27.     showInfo(); 
  28.     return false; 
  29.   } 
  30.   return true; 
  31.  
  32. private function showInfo():void 
  33.   var textWarning:TextField = new TextField(); 
  34.   textWarning.defaultTextFormat = new TextFormat("Tahoma", 24, 0x333333); 
  35.   textWarning.selectable = false
  36.   textWarning.multiline = true
  37.   textWarning.autoSize = "center"
  38.   textWarning.x = 300
  39.   textWarning.y = 100
  40.   addChild(textWarning); 
  41.  
  42.   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中所有动作的前面调用如下代码,即可生效:

  1. if (!checkDomain()) 
  2.   return; 

 

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器