Wilt u uw SWF exclusief houden voor uw site? In deze Snelle tip bekijken we hoe u een 'sitevergrendeling' gebruikt om te voorkomen dat mensen uw SWF downloaden en deze op een andere website insluiten.
Hier is het bestand dat op een verkeerd domein wordt uitgevoerd:
We bouwen een geanimeerde weergave die moet worden geactiveerd wanneer de SWF zich op het verkeerde domein bevindt, zoals in het bovenstaande voorbeeld. Zeggen dat, als je gewoon meer wilt weten over de sitevergrendelcode, ga dan naar stap 5.
Voordat je begint met het schrijven van code en het toevoegen van ontwerpen aan het podium, moet je eerst Tweener kopen. Voor dit project heb ik open source gebruikt, die kan worden gebruikt voor open en commerciële projecten. Caurina-tweener is beschikbaar op code.google.com.
Nadat je Tweener hebt gedownload, kopieer en plak je het gewoon in je projectmap. Vergeet niet dat de map een naam moet hebben caurina
, in de map moet er een map zijn met de naam overgangen en daarbinnen een lading Flash .as klassebestanden.
Als de eerste stap is voltooid, kunnen we doorgaan met het coderen en ontwerpen van het bestand.
De bestandsgrootte is niet relevant. Domein locker's eigenschap is om uw SWF, of component, vast te zetten voor het geval iemand het van u heeft gedownload zonder uw toestemming.
Voor dit voorbeeld heb ik een stage van 540 x 400 gebruikt, je kunt elke gewenste grootte gebruiken.
Nadat u de bestandsgrootte hebt geselecteerd, maakt u 3 nieuwe lagen zoals in de onderstaande afbeelding. Houd je Acties laag altijd leeg. Georganiseerde stadia zijn veel gemakkelijker om mee te werken en te begrijpen.
Nadat u de 3 lagen hebt gemaakt, maakt u 2 nieuwe eenvoudige filmclips. Plaats ze waar u maar wilt, welke maat u ook wilt. 40 pixel hoogte bij 10 pixelbreedte laten we zeggen, zonder slag. Positionering is niet belangrijk, omdat we deze filmclips later door actionscript zullen plaatsen.
Nu komt het belangrijkste aspect van deze filmclips, het registratiepunt. Kijk naar de onderstaande afbeeldingen, bij het converteren van uw bitmaps naar filmclips, denk eraan het volgende te doen anders zal het bestand niet op zijn volledige potentieel draaien:
En natuurlijk, de instantienamen:
Gefeliciteerd! U hebt de vakjes toegevoegd die de pagina sluiten, voor het geval het domein niet klopt. Voeg nu een dynamisch tekstvak toe in het midden van het werkgebied of waar u maar wilt. Dit tekstvak informeert de gebruiker die het bestand illegaal heeft gedownload dat het bestand wordt beschermd door het script ... Geef het een instantienaam van warning_txt
Nu, nadat je de filmclips en het tekstvak hebt gemaakt, ben je klaar om te coderen. Op de vergrendelde acties laag, druk op F9, en voeg de volgende code toe:
import flash.events. *; import flash.display.LoaderInfo; import flash.display.MovieClip; import flash.net.navigateToURL; import flash.net.URLRequest; import flash.net.URLVariables; import caurina.transitions.Tweener
flash.events. *;
laadt alle evenementen die we waarschijnlijk nodig hebben.flash.display.LoaderInfo;
roept alle informatie op die we moeten laden en die wordt geladen met het bestand.flash.flash.display.MovieClip;
laadt alle gebeurtenissen die we tegenkomen tijdens het gebruik van filmclips.import caurina.transitions.Tweener;
laadt onze tween-engine en de animatie van de inhoudsblokkerende balken.De rest van de geladen gebeurtenissen zijn nodig, zodat Flash toegang krijgt tot de pagina-URL in de balk.
var url: String = stage.loaderInfo.url;
Laten we aannemen dat de SWF op de pagina is geladen http://www.domainName.com/siteFolder/sitePage.html. Regel 9 haalt deze URL op en wijst deze toe aan de tekenreeks url
.
Nu Flash weet waar de URL vandaan komt, is het tijd om dat te vergelijken met de URL van onze website en actie te ondernemen als ze matchen of niet
function pageDomainCheckInit (event: Event): void if (url! = "http://www.domainName.com/siteFolder/sitePage.html") warning_txt.text = "Dit bestand wordt uitgevoerd op de verkeerde URL. Beperkt!"; closeBoxTop.x = 0 closeBoxTop.visible = true; closeBoxTop.height = stage.stageHeight / 2 Tweener.addTween (closeBoxTop, width: stage.stageWidth, alpha: 0.8, time: 1, transition: "easeInOutExpo"); closeBoxBottom.x = stage.stageWidth closeBoxBottom.visible = true; closeBoxBottom.height = stage.stageHeight / 2 Tweener.addTween (closeBoxBottom, width: stage.stageWidth, time: 1, alpha: 0.8, transition: "easeInOutExpo"); else warning_txt.text = ""; closeBoxTop.visible = false; closeBoxBottom.visible = false; stage.removeEventListener (Event.ENTER_FRAME, pageDomainCheckInit); stage.addEventListener (Event.ENTER_FRAME, pageDomainCheckInit);
We hebben een gebeurtenislistener gebruikt om het controleren van de eerder gedetecteerde URL-reeks te starten. Wat dit in feite doet, is tell flash dat als de tekenreeks in de navigatiebalk (of de URL waar de pagina wordt gehost) niet de juiste is, de pagina het script van het blokkeren van inhoud uitvoert en de gebruiker waarschuwt dat het domein is incorrect. Als dit niet het geval is, worden de vakken die de pagina sluiten niet weergegeven als de pagina correct is geplaatst en de waarschuwingstekst niet.
Nadat dit gedeelte is voltooid, verwijderen we de gebeurtenislistener zodat het bestand geen bronnen opslokt door steeds opnieuw te controleren en opnieuw te controleren. Nadat de tekenreeks met succes is getrokken, vergeleken en het script met succes is uitgevoerd, wordt het script met succes uitgevoerd pageDomainCheckInit
evenement is verwijderd.
if (url! = "http://www.domainName.com/siteFolder/sitePage.html")
Dit gedeelte van de code is in feite een "INDIEN NIET", dus als de pagina dat niet is http://www.domainName.com/siteFolder/sitePage.html
Flash zal beginnen met het uitvoeren van functies onder de IF, maar anders - als de SWF op de juiste pagina staat - verwijdert Flash de blokken uit het werkgebied en houdt alles netjes en opgeruimd. Je zult nooit weten dat het er is.
Laten we nu kijken wat er gebeurt als het bestand niet in het juiste domein is.
warning_txt.text = "Dit bestand wordt op de verkeerde pagina uitgevoerdDomain. Content Access Restricted!"; closeBoxTop.x = 0 closeBoxTop.visible = true; closeBoxTop.height = stage.stageHeight / 2 Tweener.addTween (closeBoxTop, width: stage.stageWidth, alpha: 0.8, time: 1, transition: "easeInOutExpo"); closeBoxBottom.x = stage.stageWidth closeBoxBottom.visible = true; closeBoxBottom.height = stage.stageHeight / 2 Tweener.addTween (closeBoxBottom, width: stage.stageWidth, time: 1, alpha: 0.8, transition: "easeInOutExpo");
De code die u hier ziet, positioneert de closeBoxes naar het begin van de fase en het einde van de fase (closeBoxTop = 0, closeBoxBotton = stage.stageWidth
), en maakt ze onzichtbaar (closeBoxTop.visible = false, closeBoxBottom.visible = false
) dit verbergt ze voor het podium, houdt ze uit het zicht en heeft geen invloed op het uiterlijk van de site. Toch zijn ze er.
Als de pagina of het onderdeel op een andere site / domeinnaam is geïnstalleerd waarvoor het oorspronkelijk niet was bedoeld, worden deze zichtbaar. Ze breiden zich uit over het scherm, bedekken het volledig en waarschuwen de gebruiker dat de inhoud wordt gestolen of niet waar het hoort te zijn.
Deze maatregel informeert niet alleen de algemene gebruiker dat het bestand niet is waar het hoort te zijn, maar het blokkeert ook dat inhoud wordt weergegeven.
Wat als we alleen willen controleren of de SWF is geladen in een specifiek domein?
Dus in plaats van controleren of de SWF is ingeschakeld http://www.domainName.com/siteFolder/sitePage.html
, we controleren alleen of het ergens op de domainName.com
website. Dus het zou kunnen zijn https://private.domainName.com/secure/secret.html
en nog steeds werken.
We kunnen dit bereiken door de code te bewerken die de URL krijgt, zoals:
var url: String = stage.loaderInfo.url; // deze lijn was hier eerder! var urlBeginning: int = url.indexOf (": //") + 3; var urlTermination: int = url.indexOf ("/", urlBeginning); var pageDomain: String = url.substring (urlBeginning, urlTermination); var lastDot: int = pageDomain.lastIndexOf (".") - 1; var CharacterAfterDomain: int = pageDomain.lastIndexOf (".", lastDot) + 1; pageDomain = pageDomain.substring (CharacterAfterDomain, pageDomain.length);
Laten we aannemen dat de SWF op de pagina is geladen http://www.domainName.com/siteFolder/sitePage.html. Regel 9 haalt deze URL op en wijst deze toe aan de gekozen String url
. Dat is dezelfde lijn die we eerder hadden.
Regel 10 van code haalt de positie op binnen de URL van de : //
Regel 11 van code haalt de eerste op /
dat verschijnt in de URL na de : //
. Dit is eigenlijk heel belangrijk omdat hiertussen uw echte domeinnaam te vinden is.
Regel 12 van de code, maakt gewoon de verbinding in Flash van wat er tussen de: // en de eerste staat / de domeinnaamreeks in de volgende stap klaarzetten om te controleren. Op dit punt, met ons voorbeeld, PAGEDOMAIN
is ingesteld op www.domainName.com
.
De resterende code controleert op de domeinnaamreeks, wat er voor staat (wat betekent "www" of "http: // www.") En wat er achter uw domeinnaam staat (wat betekent ".").
Al deze worden genegeerd, zodat Flash de eigenlijke domeinnaam kan definiëren. De domainName.com
. In plaats van te controleren:
if (url! = "http://www.domainName.com/siteFolder/sitePage.html")
… wij controleren:
if (pageDomain! = "domainName.com")
Het grootste probleem met deze techniek is dat het niet werkt voor domeinen die uit drie delen bestaan. Bijvoorbeeld, domainName.co.uk
- deze code krijgt ".co.uk" als de waarde van pageDomain. Toch is het mijn voorkeursmethode, zoals ik in de volgende stap zal uitleggen.
Mogelijk hebt u verschillende bestanden op uw server, op verschillende domeinen, deze methode had op zo'n manier kunnen worden uitgevoerd dat het bestand zou worden vergrendeld op een enkele en unieke URL, zoals hierboven. Maar als u uw bestand zou uitvoeren met behulp van deep linking bijvoorbeeld, of subdomeinen, zou het bestand stoppen met werken, vanwege het feit dat de link ongeldig zou zijn voor de domeingelezer.
Het feit dat de code is if (pageDomain! = "domainName.com")
is zeer belangrijk. Hiermee kunt u deze code toevoegen aan elk bestand op uw site, subdomein, deeplink-locatie; zolang uw link op dat domein staat, wordt het bestand uitgevoerd en wordt het domeinblokkering niet geactiveerd!
Toch kan het nuttig zijn om te vergrendelen tot iets specifiekers dan een domeinnaam. Stel dat u uw website host op een host zoals Amazon S3. Dan is uw URL iets als http://yoursitename.s3.amazonaws.com/folder/page.html. Maar iemand anders op Amazon S3 kan de URL hebben http://someoneelse.s3.amazonaws.com/. Ze kunnen de SWF uploaden naar hun site en omdat de SWF nog steeds is ingeschakeld amazonaws.com de domeinkast zou niet blokkeren.
Dit is een kleine tip waar je misschien heel veel van houdt. Laten we eens aannemen dat u dezelfde inhoud op verschillende domeinnamen heeft en u geen andere code wilt toevoegen voor elk van uw domeinen. U kunt het bestand voor meerdere domeinen in één keer heel eenvoudig controleren.
Maak kennis met de AND-operator: &&
Met deze opdracht in de eerste schijf kunt u zoveel domeinen toevoegen als u wilt. Ik zal je laten zien hoe! :)
Single domeincontrole:
(PAGEDOMAIN! = "DomainName.com")
Meerdere domeincontrole:
((pageDomain! = "domainName.com") && (pageDomain! = "mydomain.com") && (pageDomain! = "hisdomain.com"))
echt gemakkelijk, is het niet?
Wel, dit wikkelt het op. Zoals jullie allemaal weten, is volledige bescherming van flash-bestanden nooit 100% gegarandeerd, maar dit is slechts een stap, om uw site veiliger, beter en veiliger te maken tegen bestandsdiefstal. Vergeet niet om uw bestanden te versleutelen voordat u ze aan de server toevoegt! Bedankt voor het lezen van deze tutorial. Ik hoop dat dit nuttig voor u is. Als u verdere hulp nodig heeft, aarzel dan niet om uw vragen achter te laten in de sectie Opmerkingen..