2011-05-31 65 views
0

我正在使用一个类来锁定swf到sertand域。 它适用于像'mydomain.com,mydomain.eu,mydomain.org'等分机的域名。'co.uk'域代码失败

但是,当我添加到像'mydomain.co.uk'这样的域这不起作用。即使域允许进入swf文件,sitelock类仍然会阻止该域。 任何我可以改变到这个类来解决这个问题?下面

代码:

package 
{ 
    import flash.display.Stage; 
    import flash.net.*; 
    import flash.external.ExternalInterface; 

    public class SiteLock 
    { 
     private static var stage:Stage; 

     private static var allowLocal:Boolean = false; 

     private static var acceptedSites:Array = []; 

     private static var deniedSites:Array = []; 


     public function SiteLock():void 
     { 
     } 

     public static function registerStage(_stage:Stage):void 
     { 
      SiteLock.stage = _stage; 
      trace("[SiteLock] Stage registered"); 
     } 

     public static function allowSites(sitesArray:Array):void 
     { 
      SiteLock.acceptedSites = sitesArray.concat(); 
      trace("[SiteLock] Accepted sites: " + SiteLock.acceptedSites); 
     } 

     public static function denySites(sitesArray:Array):void 
     { 
      SiteLock.deniedSites = sitesArray.concat(); 
      trace("[SiteLock] Denied sites: " + SiteLock.deniedSites); 
     } 

     public static function allowLocalPlay(permission:Boolean=true):void 
     { 
      SiteLock.allowLocal = permission; 
     } 

     public static function checkURL(destroy:Boolean=false):Boolean 
     { 

      var url:String = SiteLock.stage.loaderInfo.url; 
      var urlStart:Number = url.indexOf("://") + 3; 
      var urlEnd:Number = url.indexOf("/",urlStart); 
      var domain:String = url.substring(urlStart,urlEnd); 
      var LastDot:Number = domain.lastIndexOf(".") - 1; 
      var domEnd:Number = domain.lastIndexOf(".",LastDot) + 1; 
      domain = domain.substring(domEnd,domain.length); 
      var protocol:String = url.substring(0,url.indexOf(":")); 
      trace("[SiteLock] " + protocol == "file" ? "The .swf is locally hosted.":"This .swf is hosted at " + domain); 



      if (SiteLock.acceptedSites.length != 0 && SiteLock.acceptedSites.indexOf(domain) == -1 && protocol != "file" || protocol == "file" && ! SiteLock.allowLocal || SiteLock.deniedSites.length != 0 && SiteLock.deniedSites.indexOf(domain) != -1 && protocol != "file") 
      { 
       trace("[SiteLock] This .swf is hosted illegally"); 
       Redirect(); 
      //} 
       if (destroy) 
       { 
        throw new Error("Sorry, I just have to present this great error now!"); 
        while (SiteLock.stage.numChildren > 0) 
        { 
         SiteLock.stage.removeChild(SiteLock.stage.getChildAt(0)); 
        } 
        //throw error for debugger version 
        throw new Error("This game is hosted illegally. If you find this game here, please contact webmaster", 9001); 
       } 
       return false; 
      } 
      else 
      { 
       return true; 
      } 
     } 

     public static function Redirect():void 
     { 
      var url:String = "http://google.nl"; 
      var urlLink:URLRequest = new URLRequest(url); 
      navigateToURL(urlLink,"_top"); 
     } 

     public static function isLocal():Boolean 
     { 

      var url:String = SiteLock.stage.loaderInfo.url; 
      var urlStart:Number = url.indexOf("://") + 3; 
      var urlEnd:Number = url.indexOf("/",urlStart); 
      var domain:String = url.substring(urlStart,urlEnd); 
      var LastDot:Number = domain.lastIndexOf(".") - 1; 
      var domEnd:Number = domain.lastIndexOf(".",LastDot) + 1; 
      domain = domain.substring(domEnd,domain.length); 
      var protocol:String = url.substring(0,url.indexOf(":")); 
      return protocol == "file"; 
     } 
    } 


} 

回答

0

我将开始通过组织if语句通过放置括号创建和部分的或运营商

+0

感谢您在这里回复我。Stiil我卡住了,仍然不确定我的sitelock出了什么问题,因为它确实可行所有其他域然后.co.uk域.. – johnsone 2011-06-02 08:22:33

1

我会想象它与搜索之间最后'。'找到顶级域名,它会告诉你顶级域是“.UK”而不是“.co.uk”

请记住,你不能真正制定出顶级域名以可靠的方式这条路。考虑到这些域名:

www.mydomain.com 
myotherdomain.co.uk 

它们都有2个点,但一个属于.com和另.co.uk

最好的办法是找到全域和测试,如果字符串以'.com','.co.uk','.org'或其他任何形式结尾

+0

好点,实际上对我来说,似乎没有找到最后一个点,找到协议的第二个点将做分离的域名。也就是说,除非子域允许有点,但我不确定。 – 2011-05-31 12:37:50

+0

感谢您在这里回复我.. Stiil我卡住了,仍然不确定我的sitelock有什么问题,因为它确实适用于所有其他域然后.co.uk域.. – johnsone 2011-05-31 18:13:23