2010-10-05 24 views
10

Tôi muốn cập nhật các đối số giá trị FlashVars để xem một video:Cập nhật FlashVars và tải lại flash với jQuery

<param name='flashvars' value='movieId=1002' /> 

tôi phát hiện ra rằng tôi có thể làm cho nó hoạt động trong Firefox bằng cách cập nhật các tham số với bước thêm của readding toàn bộ nội dung flash.

$("param[name=flashvars]").attr("value", "movieId=33"); 
$("embed").attr("flashvars", "movieId=33"); 
$(".root").append($("#video")); 

Nhưng điều này không hoạt động trong IE8 vì trình duyệt sẽ không làm mới nội dung flash. Bất kỳ ý tưởng nào về cách tải lại nội dung flash mà không có các phụ thuộc bên ngoài như swfobject.js?

Trả lời

0

Thay vì sử dụng flashvars, bạn có thể sử dụng lớp ExternalInterface AS3 để gửi giá trị mới cho Flash.

ExternalInterface cho phép một liên lạc hai chiều giữa AS3 & Javascript

+2

Đó không phải là giải pháp theo như tôi hiểu. Điều gì sẽ xảy ra nếu chúng tôi cần tải lại Flash? – momijigari

4

tôi tò mò về vấn đề này quá. Tôi đang cố gắng để gửi một chuỗi mới thông qua flashvars để một SWF mà tôi không có cơ hội để thay đổi, và chỉ cần thay đổi các flashvars với jQuery, mà không cần phải sử dụng externalinterface, là lựa chọn tốt nhất.

+0

Tôi cũng đang tìm kiếm điều đó. – Natim

0

Thực ra, tại sao không sử dụng swfobject.js?

tôi đã làm như thế này:

<script type="text/javascript" src="js/jquery-1.4.4.min.js"></script> 
    <script type="text/javascript" src="js/swfobject.js"></script> 

    <div id="qsound"></div> 

<script type="text/javascript"> 
    if(q.sound) { 
    swfobject.embedSWF("js/dewplayer/dewplayer.swf", "qsound", "60", "20", "9.0.0", false, {'mp3': 'sounds/'+q.sound}, {'wmode': 'transparent'}); 
    $('#qsound').show(); 
} else { 
    $('#qsound').hide(); 
} 
</script> 
3

Nếu bạn muốn thay đổi các vars flash và tải lại Flash, bạn chỉ nên loại bỏ các SWF từ DOM và nhúng nó một lần nữa với vars mới của bạn (sử dụng SWFObject hoặc bất cứ phương pháp nào khác phù hợp với sở thích của bạn!).

Nếu bạn muốn thay đổi các lọ đèn flash mà không cần tải lại Flash, bạn sẽ không may mắn: không có cách nào được hỗ trợ chính thức. Trong trường hợp này, bạn nên sử dụng ExternalInterface để gọi các phương thức ActionScript cập nhật các giá trị của bạn từ JavaScript.

5
// update flashvars 
var fv = 'foobar=1'; 

$("object param[name='flashvars']").attr("value", fv); 
$("embed").attr("flashvars", fv); 

// create new object to hold it  
var obj = $("object"); 

// remove existing Flash from DOM 
$("object").remove(); 

// add new HTML to DOM 
$("#mviewer").append(obj.html()); 
+0

Câu trả lời hay - điều này làm việc cho tôi. Tuy nhiên, tôi đã chuyển ra dòng cuối cùng với '$ (" # mviewer ") append (obj); ' – Eric

+0

Không hoạt động cho tôi: – momijigari

+0

Bạn cần sử dụng * external * HTML của đối tượng (để bao gồm' '' '' 'tag). Ví dụ. '' 'chắp thêm (obj [0] .outerHTML)' ''. –

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