2010-02-20 31 views
7

Tôi có một A.swf tải B.swf lên một movieclip và cần phải vượt qua nó một số FlashVars. Khi tải B.swf với html, tôi có thể vượt qua FlashVars tốt. Khi đi qua từ A.swf, nó nhận được một sốAS3 Vượt qua FlashVars để tải swf

Lỗi # 2044: Đã sửa lỗi ioError :. văn bản = Lỗi # 2032: Lỗi luồng. URL: file:

Các mã trong A.swf là

var request:URLRequest = new URLRequest ("B.swf"); 

var variables : URLVariables = new URLVariables(); 
variables.xml = "test.xml"; 

// This line causes the error 2044, else B.swf loads fine with FlashVars 
request.data = variables; 

loader.load (request); 

Trong B.swf, nó được kiểm tra flashVars như vậy. Nó hoạt động tốt từ phía html

this.loaderInfo.parameters.xml 
+0

Đó là một câu hỏi mơ hồ. Có hai phần: 1) Cách nhận FlashVars vào B, mà tôi trả lời dưới đây. 2) Làm thế nào để chuyển bất kỳ loại biến nào vào B từ A. –

Trả lời

0

bạn có thể thêm đèn flash vars vào URI khi bạn đang tải nó

URLRequest(String("B.swf" + "?myvar=45")); 

vấn đề được rằng khi bạn nạp chuỗi trong uri, nó được đưa bên trong một đối tượng loaderInfo.parameters vì vậy nếu bạn muốn chuyển các tham số đó, bạn cần phải tạo một chuỗi để chuyển các tham số này vào.

đây là một kịch bản từ http://ragona.com/blog/pass-flashvars-loaded-swf/ cho thấy làm thế nào để chuyển đổi đó vào một mảng chuỗi lại

//:: Store loader info 
var lInfo:Object = this.root.loaderInfo.parameters; 
//:: Flashvars 
var fVars:String = "?whee=nada"; //:: Getting the syntax change (? --> &) out of the way with a dummy var 

//:: Set path + data 
for (var flashVar in lInfo) 
{ 
    fVars += "&" + flashVar + "=" + lInfo[flashVar]; 
} 

var myRequest:URLRequest = new URLRequest(String("/myPath.swf" + fVars)); 
+0

Cảm ơn, nhưng tôi quên đề cập đến, tôi đã thử điều đó và nó cũng cho cùng một lỗi. Tôi thấy một trang được đề cập vì FlashVars không thể hoạt động với swf cục bộ, có phải là sự cố không? – Robin

+0

Tôi không thấy lý do nào khiến nó không hoạt động, nhưng bạn có thể thử "sandboxing" các quyền đối với thư mục đó. – Daniel

0

Làm thế nào để sandbox cho phép? Tôi đã thử thêm thư mục thông qua các cài đặt, nhưng điều đó cũng không hoạt động.

http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html#117502

Tôi đã tạo một dự án đơn giản như mới. Đây là mã hoàn chỉnh.

var mc:MovieClip = new MovieClip(); 

var loader:Loader = new Loader(); 
loader.contentLoaderInfo.addEventListener (Event.COMPLETE, OnComplete); 

var request:URLRequest = new URLRequest ("B.swf"); 

var variables : URLVariables = new URLVariables(); 
variables.xml = "test2.xml"; 

// This line causes the error 2044, if i comment out, it runs fine without FlashVars 
request.data = variables; 

loader.load (request); 


function OnComplete (e:Event) 
{ 
    trace ("On Complete"); 
    mc = e.currentTarget.content as MovieClip; 
    addChild (mc); 
} 
+0

Tôi đã tìm thấy vấn đề là gì. Nó hoạt động nếu tôi chạy swf trong trình phát flash bình thường, nhưng không phải là phiên bản gỡ lỗi khi tôi khởi chạy từ trình chỉnh sửa bằng Ctrl + Enter. Nhưng tôi không thể gỡ lỗi nữa hmmm .. – Robin

+0

theo dõi (Security.sandboxType), cho tôi localTrusted. Tôi đã thêm Security.allowInsecureDomain ("*") nhưng vẫn không đi. – Robin

17

Mặc dù phương thức chuỗi truy vấn phải hoạt động tốt tại địa phương, nếu bạn đang sử dụng Flash Player 10.2, có API mới cho việc này.

var context:LoaderContext = new LoaderContext(); 
context.parameters = {'xml': 'test.xml'}; 
loader.load(request, context); 

Các tài liệu là ở đây: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/LoaderContext.html#parameters

+1

Tôi ước tôi có thể bỏ phiếu mười lần ... –

+0

Dường như bị xóa khỏi API. 'parameters' is undefined :( – roberkules

+0

@roberkules Bạn đang nhắm mục tiêu đúng phiên bản của Flash? –

2

Nó không cần thiết mà "A" vượt qua FlashVars để "B". Chỉ cần có B truy cập FlashVars chính nó. Nội dung sau đây sẽ hoạt động cho dù B ở bên trong A hay chính cấp cao nhất:

Thêm ADDED_TO_STAGE trình xử lý sự kiện vào hàm tạo B. ví dụ:

function B(){ 
    this.addEventListener(Event.AddedToStage, onAddedToStageHandler); 
} 

Khi bạn có quyền truy cập vào các giai đoạn bây giờ bạn có thể truy cập vào FlashVars A theo cách này:

Để xem đúng một biến gọi là myVar flashVar trong B.swf, bạn làm (bên B) :

private function onAddedToStageHandler(){ 
var flashVars : Object = LoaderInfo(this.stage.loaderInfo).parameters; 
// now you have access to your flashVars! 
trace(flashVars.myVar); 
} 

stage.loaderInfo là những gì bạn cần xem.

+0

cảm ơn giải pháp tốt nhất theo ý kiến ​​của tôi –

+0

Tôi cũng nghĩ vậy :) –

Các vấn đề liên quan