[FLASH LITE 1.1]swf?後的query 變數傳遞

LINEで送る
[`evernote` not found]

之前沒有自己確認過還以為FLASH LITE 1.1的參數傳遞只需要用_level0就可以抓得到
但是實際要做時才發現並不是這麼簡單
比較保險的做法是參考携帯Flash (FLASH Lite 1.1) へ普通にパラメータを渡す的方式
透過php把SWF轉換後
直接把變數加到SWF中再轉回輸出
再加上モバケー的參數傳遞本身就比較麻煩
所以我又另外寫的一個function來取得SWF實際使用的URL

functionApp.php:

//
		function swf_param_insert($file, $varsName, $item){
			$tags	= build_string($varsName, $item);
			$src	= file_get_contents($file);
			$i		= (ord($src[8])>>1)+5;
			$length	= ceil((((8-($i&7))&7)+$i)/8)+17;
			$head	= substr($src,0,$length);
			return(
				substr($head,0,4).
				pack("V",strlen($src)+strlen($tags)).
				substr($head,8).
				$tags.
				substr($src,$length)
			);
		}
 
		function build_string($varsName, $item) {
			$s = sprintf(
				"\x96%s\x00%s\x00\x96%s\x00%s\x00\x1d",
				pack("v",strlen($varsName)+2),	$varsName,
				pack("v",strlen($item)+2),	$item
			);
			return(sprintf(
				"\x3f\x03%s%s\x00",
				pack("V",strlen($s)+1),
				$s
			));
		}
//
		function getFlashUrl($file,$params){
			global $gameURL;    //這是另外定義的路徑,換上自己的實際路徑就OK了
 
			$flashUrl = "location: ".$gameURL."swf.php?swffile=";
			$flashUrl .= $file."%3F";
			foreach($params as $k => $v){
				$flashUrl .= $k."%3D".$v;
				$flashUrl .= "%252526";
			}
			return $flashUrl;
		}

swf.php:

<?php
	require_once("function.php");
 
	header("Content-Type: application/x-shockwave-flash");
	$swffile = $_GET['swffile'];
	$params = explode("?",$_GET['swffile']);
 
	print swf_param_insert('swf/'.$params[0].'.swf', "trackParams", $params[1]);
 
?>

use.php:

	$params["flashVar1"] = "test1";
	$params["flashVar2"] = "test2";
	$params["flashVar3"] = "test3";
	if(isset($_GET['flash'])) header(getFlashUrl("testSwf",$params));

testSwf.fla:

fscommand2("FullScreen", true);
fscommand2("SetQuality", "high");
_focusrect = false;
urlStr = "http://justTest.com/";
urlStr = urlStr add "justTest.php?" add trackParams;
 
on(keyPress "<Enter>") {
	getURL(_root.urlStr, "", "GET");
}
 
on(press ) {
	getURL(_root.urlStr, "", "GET");
}