2009-09-02 3 views
1

ユーザーがリンクをクリックすると、それは、ページへのようなもの、それらをリダイレクトします:Flash/AS3を使用してURL変数を取得することはできますか?

をwww.domain.com/index.php?var=string

は、変数をつかむためにAS3で可能です(var)??

(私は変数を得る方法がたくさんあると知っています。例えば、PHP $ _GETですが、私のウェブサイトは純粋にフラッシュベースなので、PHPを使って値を取得してセッションに保存して渡したいメインボタンがFlashになっているのでフォームに保存して他のページに渡すことができませんでしたので、変数を渡すためにAS3を使用する必要があります)。

+0

が重複する可能性を](http://stackoverflow.com/questions/2725231/how-to-get-obtain-variables-from-url-in-flash-as3) –

+0

これは重複している、答えはここで与えられたhttp:// stackoverflow .com/a/2725365 –

答えて

1

<object>コードでFlashVarsをパラメータとして使用している場合は、this tutorialをチェックしてください。基本的にPHPやJavascriptを使用してアドレス文字列から変数を取得し、<param> FlashVarsタグに挿入することができます。

+0

また、Adobeのこの公式ドキュメントがhttp://kb2.adobeに役立つ場合があります。co.jp/cps/164/tn_16417.html –

+0

リンクありがとうございます。私はグーグル、しかしdidntはこのリンクを見つけました。さて、それを読んで実装するには、しばらく時間がかかります。成功すれば、私はあなたの答えをこの質問の最良の答えとして投票します。 –

2
import flash.external.ExternalInterface; 

var urlStr:String = ExternalInterface.call('window.location.href.toString'); 

この呼び出しは、現在のページのURLを与えるようにJSに依頼します。

次に解析して変数を抽出することができます。例:http://manfred.dschini.org/2008/05/12/as3-url-class/

1

I second @Daniels。このクラスを使用して文字列を解析し、簡単に呼び出せるオブジェクトに配置できます。

package 
{ 
    import flash.external.*; 

    public class QueryString 
    { 
     private var _queryString:String; 
     private var _all:String; 
     private var _params:Object; 

     public function QueryString(url:String='') 
     { 
      readQueryString(url); 
     } 
     public function get getQueryString():String 
     { 
      return _queryString; 
     } 
     public function get url():String 
     { 
      return _all; 
     } 
     public function get parameters():Object 
     { 
      return _params; 
     }  

     private function readQueryString(url:String=''):void 
     { 
      _params = new Object(); 
      try 
      { 
       _all = (url.length > 0) ? url : ExternalInterface.call("window.location.href.toString"); 
       _queryString = (url.length > 0) ? url.split("?")[1] : ExternalInterface.call("window.location.search.substring", 1); 
       if(_queryString) 
       { 
        var allParams:Array = _queryString.split('&'); 
        //var length:uint = params.length; 

        for(var i:int=0, index=-1; i < allParams.length; i++) 
        { 
         var keyValuePair:String = allParams[i]; 
         if((index = keyValuePair.indexOf("=")) > 0) 
         { 
          var paramKey:String = keyValuePair.substring(0,index); 
          var paramValue:String = keyValuePair.substring(index+1); 
          _params[paramKey] = paramValue; 
         } 
        } 
       } 
      } 
      catch(e:Error) 
      { 
       trace("Some error occured. ExternalInterface doesn't work in Standalone player."); 
      } 
     } 
    } 
} 

そして

var myPath:QueryString = new QueryString("http://www.studiosedition.com/?page=articles"); 
trace(myPath.parameters.page); 

これは私が私のAS3にGETクエリ文字列を渡すために使用するものです。このサイト

http://blog.studiosedition.com/2010/03/query-string-as3/

+0

魅力的な作品です。 myPath.parameters.yourvarnameというURLで使用しているものと一致するように変数名を変更することを忘れないでください。また、ブラウザでこれをテストする必要があるため、通常のFlash Playerを使用してトレース機能を使用することはできません。ステージにダイナミックなテキストフィールドを追加し、インスタンス名をvarsにして、vars.text = "vars" + myPath.parameters.yourvarnameを使用しました。 – crooksy88

1

から撮影。

まず、ここではPHP(developphp.comから変更されたコード)からのFlashVarsを集めるメインのタイムラインからのアクションです:

// Claim the offset Number that spaces the text 
// fields so they are not right on top of each other 
var offSet:Number = 18; 
// Claim keyStr variable as a string 
var keyStr:String; 
// Claim valueStr variable as a string 
var valueStr:String; 
// Create the paramObj Object and set it to load parameters 
// from the root level being sent in by FlashVars externally 
var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters; 

// Set Text Format Object, its attributes and values 
var format:TextFormat = new TextFormat(); 
     format.font = "Verdana"; 
     format.size = 15; 
// Create the loop that iterates over all of the variables you send in using FlashVars  
var i=0; 
for (keyStr in paramObj) { 
     i++; 
     valueStr = String(paramObj[keyStr]);  // This line gets the values of each variable sent in 
     var myText:TextField = new TextField(); // Create a text field to read and access each var 
     myText.defaultTextFormat = format; // Set the formatting into the text field properties 
     myText.text = keyStr + " value is: " + valueStr; // Use the vars here, I place into text field waiting 
     myText.y = offSet*i; // Before we place each text field on stage we offSet it 
     myText.width = 380; // Set the width of the text field 

     this.addChild(myText); // Now this line actually places the text field on stage 

} 

が続いてここに(もdevelopphp.comから修正)PHP

です
<?php 
$vars = http_build_query($_GET); 
?> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>Editor</title> 
<script language="javascript">AC_FL_RunContent = 0;</script> 
<script src="AC_RunActiveContent.js" language="javascript"></script> 
</head> 
<body bgcolor="#333333"> 
<script language="javascript"> 
    if (AC_FL_RunContent == 0) { 
     alert("This page requires AC_RunActiveContent.js."); 
    } else { 
     AC_FL_RunContent(
      'codebase', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0', 
      'width', '400', 
      'height', '400', 
      'src', 'editor', 
      'FlashVars', '<?php echo $vars; ?>',    
      'quality', 'high', 
      'pluginspage', 'http://www.macromedia.com/go/getflashplayer', 
      'align', 'middle', 
      'play', 'true', 
      'loop', 'true', 
      'scale', 'showall', 
      'wmode', 'window', 
      'devicefont', 'false', 
      'id', 'editor', 
      'bgcolor', '#ffffff', 
      'name', 'editor', 
      'menu', 'true', 
      'allowFullScreen', 'false', 
      'allowScriptAccess','sameDomain', 
      'movie', 'editor', 
      'salign', '' 
      ); //end AC code 
    } 
</script> 
<noscript> 
    <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="400" height="400" id="AS3_php_Var_into_flash" align="middle"> 
    <param name="allowScriptAccess" value="sameDomain" /> 
    <param name="allowFullScreen" value="false" /> 
    <param name="movie" value="editor.swf" /> 
    <param name="quality" value="high" /> 
    <param name="bgcolor" value="#ffffff" />  
    <param name="FlashVars" value="<?php echo $vars; ?>" /> 
    <embed src="editor.swf" FlashVars="<?php echo $vars; ?>" quality="high" bgcolor="#ffffff" width="400" height="400" name="editor" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /> 
    </object> 
</noscript> 
</body> 
</html> 

http_build_query($ _ GET)は、URLクエリ文字列をFlash用のクエリ文字列に変換する便利な方法です。

私はこの簡単な作業を達成するためにハッキングやクラスのインポートを必要としないので、この方法をお勧めします。

1

これは必要なものです。

private function getParams():URLVariables 
{ 
    var url:String = ExternalInterface.call('window.location.href.toString'); 
    var parts:Array = url.split("?"); 
    if(parts.length == 2) 
    { 
     var uv:URLVariables = new URLVariables(parts[1]); 
     return uv; 
    } 
    else 
    { 
     return null; 
    } 
} 

あなたの例では(www.domain.com/index.php?var=string)書き込み使用するには:取得/フラッシュAS3でURLから変数を取得する[方法の

var params:URLVariables = getParams(); 
trace(params.var); // traces string