2009-09-02 3 views
1

Когда пользователь нажимает на ссылку, он будет перенаправлять их на страницу, что-то вроде:Возможно ли получить URL-переменную с помощью Flash/AS3?

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

Можно ли в AS3, чтобы захватить переменную (вар) ??

(Я знаю, что существует множество способов получить переменную, например php $ _GET, но мой сайт основан исключительно на флэш-памяти, я не хочу использовать php для получения значения и сохранения его в сеансе и передачи его на другие страницы. И я не мог хранить в форме и передавать ее другим страницам, потому что основная кнопка находится во Flash, поэтому мне нужно использовать AS3 для передачи переменной).

+0

возможно дубликат [Как получить/получить переменные из URL в флэш-AS3 ] (http://stackoverflow.com/questions/2725231/how-to-get-obtain-variables-from-url-in-flash-as3) –

+0

это дубликат, ответ был указан здесь http: // stackoverflow .com/a/2725365 –

ответ

1

Ознакомиться с this tutorial при использовании FlashVars в качестве параметра в коде <object>. В принципе, вы можете использовать PHP или Javascript для получения переменных из адресной строки, а затем вставить их в тег FlashVars <param>.

+0

Кроме того, вы можете найти эту официальную документацию из Adobe полезной: http: //kb2.adobe.com/cps/164/tn_16417.html –

+0

Спасибо за ссылку. Я googled, но не нашел эту ссылку, хотя. Ну, мне понадобится время, чтобы прочитать и реализовать его. Если его успех, я бы проголосовал за ваш ответ как лучший ответ на этот вопрос. – 2009-09-02 07:00:26

2
import flash.external.ExternalInterface; 

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

Этот звонок требует, чтобы JS предоставил вам текущий URL-адрес страницы.

Затем вы можете проанализировать его, чтобы извлечь переменные. Пример: http://manfred.dschini.org/2008/05/12/as3-url-class/.

1

I второй @ Даниэли. Вы можете использовать этот класс для синтаксического анализа строки и размещения ее в объекте с простым вызовом.

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); 

Взято с этого сайта

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

+0

Работает как шарм. Не забудьте изменить имя переменной в соответствии с тем, что вы используете в своем URL-адресе: myPath.parameters.yourvarname. Также не забывайте, что, поскольку вам нужно протестировать это через браузер, функция трассировки не используется с помощью обычного Flash Player. Я добавил динамическое текстовое поле на сцену, дал ему имя экземпляра vars и использовал vars.text = "vars" + myPath.parameters.yourvarname; – crooksy88

1

Это то, что я использовал, чтобы передать строку запроса GET в мой AS3.

Во-первых, вот действия от основной временной шкалы, которые собирают в FlashVars из PHP (модифицированный код developphp.com):

// 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 
$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) написать:

var params:URLVariables = getParams(); 
trace(params.var); // traces string 
Смежные вопросы