Flash 内の Cookie にアクセスするにはどうすればよいですか?
-
01-07-2019 - |
質問
Flash ムービー内の同じドメインの Cookie 値を取得しようとしています。これは可能でしょうか?
ユーザーに変数 foo を設定させ、任意の Web プログラミング言語を使用してそれを保存することを見てみましょう。その言語経由で簡単にアクセスできますが、HTML ページ内で印刷して渡さずに、Flash ムービー経由でアクセスしたいと考えています。
解決
データを保存および取得するだけの場合は、おそらく SharedObject クラスを使用するとよいでしょう。見る Adobe の SharedObject リファレンス 詳細については。
HTTP Cookie にアクセスしたい場合は、外部インターフェイスを使用して JavaScript と通信する必要があります。ここでこれを行う方法は、HTTPCookies というヘルパー クラスを使用することです。
HTTPCookies.as:
import flash.external.ExternalInterface;
public class HTTPCookies
{
public static function getCookie(key:String):*
{
return ExternalInterface.call("getCookie", key);
}
public static function setCookie(key:String, val:*):void
{
ExternalInterface.call("setCookie", key, val);
}
}
Flash オブジェクトの「allowScriptAccess」パラメータを使用して JavaScript を有効にする必要があります。
次に、次のように JavaScript 関数のペア getCookie と setCookie を作成する必要があります (おかげで quirksmode.org)
HTTPCookies.js:
function getCookie(key)
{
var cookieValue = null;
if (key)
{
var cookieSearch = key + "=";
if (document.cookie)
{
var cookieArray = document.cookie.split(";");
for (var i = 0; i < cookieArray.length; i++)
{
var cookieString = cookieArray[i];
// skip past leading spaces
while (cookieString.charAt(0) == ' ')
{
cookieString = cookieString.substr(1);
}
// extract the actual value
if (cookieString.indexOf(cookieSearch) == 0)
{
cookieValue = cookieString.substr(cookieSearch.length);
}
}
}
}
return cookieValue;
}
function setCookie(key, val)
{
if (key)
{
var date = new Date();
if (val != null)
{
// expires in one year
date.setTime(date.getTime() + (365*24*60*60*1000));
document.cookie = key + "=" + val + "; expires=" + date.toGMTString();
}
else
{
// expires yesterday
date.setTime(date.getTime() - (24*60*60*1000));
document.cookie = key + "=; expires=" + date.toGMTString();
}
}
}
Flash プロジェクトに HTTPCookies.as があり、Web ページから HTTPCookies.js が読み込まれたら、Flash ムービー内から getCookie および setCookie を呼び出して HTTP Cookie を取得または設定できるようになります。
これは非常に単純な値 (文字列または数値) に対してのみ機能しますが、より複雑な値に対しては SharedObject を使用する必要があります。
他のヒント
Flash オブジェクトには JavaScript を通じてアクセスできる関数があると思います。そのため、より簡単な方法がない場合は、少なくとも JavaScript の onload ハンドラーを使用して、外部から Flash アプリに document.cookie を渡すことができます。
フラッシュから Cookie (ローカル共有オブジェクト) を読み書きできます。Flash Cookie は、PC 上のドメイン名のディレクトリに保存されます。これらのディレクトリは次の場所にあります。
[Root drive]:\Documents and Settings\[username]\Application Data\Macromedia\Flash Player\#SharedObjects\
これ 記事 Adobe からの製品は良いスタートです。
いくつかのグーグルは、それを使用して実行できることを示しています クエリ文字列:
Webアプリケーションの場合、URLパラメーターによって値をSWFに渡すことができ、(SWF内のアクションスクリプトを使用)それらをサンドボックスに保存できます。
Cookie は document.cookie を通じて JavaScript で利用できます。Flash の getURL を使用して JavaScript 関数を呼び出してみてください。
getURL('javascript:document.cookie = "varname=varvalue; expires=Thu, 2 Aug 2001 20:47:11 UTC; path="');
HTTPCookies.as の getCookie メソッドでは、「return」ステートメントを使用する必要があります。
import flash.external.ExternalInterface;
public class HTTPCookies
{
public static function getCookie(key:String):*
{
return ExternalInterface.call("getCookie", key);
}
public static function setCookie(key:String, val:*):void
{
ExternalInterface.call("setCookie", key, val);
}
}
10年遅すぎるよ。必要なデータをページに埋め込むことができれば、取得が 10 倍簡単になります。
import flash.net.*
var _loader:URLLoader = new URLLoader();
var _req:URLRequest = new URLRequest('https://stackoverflow.com');
_loader.addEventListener(Event.COMPLETE, _onComplete);
_loader.load(_req);
function _onComplete(e:Event):void{
var wantedData:RegExp = /<div class="cool-data">(.*?)</div>/ig;
var result:Object = wantedData.exec(String(_loader.data));
trace(result[0].split('<div class="cool-data">').join('')
.split('</div>').join(''));
}