·您当前的位置:首页 > 技术教程 > 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. { 
  3.   var url:String = loaderInfo.loaderURL; 
  4.   var weburl:String; 
  5.   try  
  6.   { 
  7.     weburl = ExternalInterface.call("function getUrl(){return window.location.href;}"); 
  8.   } 
  9.   catch (e:Error) 
  10.   { 
  11.     weburl = ""; 
  12.   } 
  13.   // 允许运行的域名列表,使用|分隔 
  14.   var allowedDomains:String = ".*cuplayer.com|.*dev.local"; 
  15.   var allowedPattern:String = "^http(|s)://("+allowedDomains+")/"; 
  16.   var domainCheck:RegExp = new RegExp(allowedPattern, "i"); 
  17.  
  18.   if (weburl != "") 
  19.   { 
  20.     if (!domainCheck.test(url) && !domainCheck.test(weburl)) 
  21.     { 
  22.       showInfo(); 
  23.       return false; 
  24.     } 
  25.   } 
  26.   else 
  27.   { 
  28.     showInfo(); 
  29.     return false; 
  30.   } 
  31.   return true; 
  32. } 
  33.  
  34. private function showInfo():void 
  35. { 
  36.   var textWarning:TextField = new TextField(); 
  37.   textWarning.defaultTextFormat = new TextFormat("Tahoma", 24, 0x333333); 
  38.   textWarning.selectable = false; 
  39.   textWarning.multiline = true; 
  40.   textWarning.autoSize = "center"; 
  41.   textWarning.x = 300; 
  42.   textWarning.y = 100; 
  43.   addChild(textWarning); 
  44.  
  45.   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>'
    ; 
  46. } 

然后在preloader中所有动作的前面调用如下代码,即可生效:

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

 

热门文章推荐

请稍候...

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

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