Flash 用于'的代码失败;co.uk';领域
我正在使用一个类来锁定一个swf以支持和域。 对于“mydomain.com、mydomain.eu、mydomain.org”等域名来说,这是可行的 但当我把它添加到像“mydomain.co.uk”这样的域中时,它就不起作用了。即使允许该域进入swf文件,sitelock类仍然会阻止该域。 我可以在这个类中更改任何内容来解决这个问题吗 下面的代码:Flash 用于'的代码失败;co.uk';领域,flash,actionscript-3,Flash,Actionscript 3,我正在使用一个类来锁定一个swf以支持和域。 对于“mydomain.com、mydomain.eu、mydomain.org”等域名来说,这是可行的 但当我把它添加到像“mydomain.co.uk”这样的域中时,它就不起作用了。即使允许该域进入swf文件,sitelock类仍然会阻止该域。 我可以在这个类中更改任何内容来解决这个问题吗 下面的代码: package { import flash.display.Stage; import flash.net.*; im
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";
}
}
}
首先,我将通过在OR运算符之间放置括号来创建和节来组织if语句,我想这与搜索最后一个“.”有关,以查找顶级域,这将告诉您顶级域是“.uk”而不是“.co.uk” 请记住,这样做并不能真正可靠地计算出顶级域。考虑这些域名:
www.mydomain.com
myotherdomain.co.uk
它们都有两个点,但一个属于.com,另一个属于.co.uk
你最好的办法是找到完整的域名,然后测试字符串是否以“.com”、“.co.uk”、“.org”或其他任何形式结尾。好的一点是,实际上,在我看来,从协议中找到第二个点,而不是找到最后一个点,可以将域名分开。也就是说,除非子域中允许有点,但我不确定。谢谢你在这里回复我。。我仍然被卡住了,仍然不确定我的sitelock出了什么问题,因为它对所有其他域都正常工作。co.uk域..谢谢你在这里回复我。。我仍然被卡住了,仍然不确定我的sitelock有什么问题,因为它对所有其他域都可以正常工作。co.uk域。。