2009-02-10 23 views
10

Tôi cần thay đổi wmode các đối tượng flash tùy ý thành trong suốt từ tệp js bên ngoài để đảm bảo chúng không ẩn các menu mà không sử dụng Jquery hoặc libs tương tự.Thay đổi các đối tượng flash tùy ý wmode thành transparent

Trong FF I sử dụng getElementsByTagName("embed") và đặt thuộc tính. Có vẻ như để làm việc tốt.

Cụ thể tôi gặp sự cố với object được đặt bởi swfObject thư viện Trong IE7.

swfObject tạo đoạn mã sau trong IE7:

<OBJECT id=mymovie height=400 width=134 classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000> 
     <PARAM NAME="_cx" VALUE="3545"> 
     <PARAM NAME="_cy" VALUE="10583"> 
     <PARAM NAME="FlashVars" VALUE=""> 
     <PARAM NAME="Movie" VALUE="imgs/site/tower.swf"> 
     <PARAM NAME="Src" VALUE="imgs/site/tower.swf"> 
     <PARAM NAME="WMode" VALUE="Window"> 
     <PARAM NAME="Play" VALUE="0"> 
     <PARAM NAME="Loop" VALUE="-1"> 
     <PARAM NAME="Quality" VALUE="High"> 
     <PARAM NAME="SAlign" VALUE=""> 
     <PARAM NAME="Menu" VALUE="-1"> 
     <PARAM NAME="Base" VALUE=""> 
     <PARAM NAME="AllowScriptAccess" VALUE=""> 
     <PARAM NAME="Scale" VALUE="ShowAll"> 
     <PARAM NAME="DeviceFont" VALUE="0"> 
     <PARAM NAME="EmbedMovie" VALUE="0"> 
     <PARAM NAME="BGColor" VALUE="FFFFFF"> 
     <PARAM NAME="SWRemote" VALUE=""> 
     <PARAM NAME="MovieData" VALUE=""> 
     <PARAM NAME="SeamlessTabbing" VALUE="1"> 
     <PARAM NAME="Profile" VALUE="0"> 
     <PARAM NAME="ProfileAddress" VALUE=""> 
     <PARAM NAME="ProfilePort" VALUE="0"> 
     <PARAM NAME="AllowNetworking" VALUE="all"> 
     <PARAM NAME="AllowFullScreen" VALUE="false"> 
</OBJECT> 

tôi đã cố gắng mọi cách có thể để thiết lập wmode-transparent và làm cho đèn flash không giấu n ~ vật nổi nhưng không thành công bao gồm nhưng không giới hạn:

  1. Tìm kiếm OBJECT và thay đổi PARAMwmode thành transparent.
  2. Set thuộc tính của Object (wmode=transparent)
  3. Gọi SetValue chức năng 's object

Không có vẻ làm việc. Mặc dù wmode dường như thay đổi Flash vẫn ẩn các đối tượng khác với cao z-index. Tôi đang thiếu gì ở đây?

+0

Bạn có thể cung cấp thêm một chút thông tin? Bạn chỉ đang cố gắng thiết lập một lần này, hoặc để tắt và bật lại? Tại sao bạn không thể đặt wmode khi trang được xây dựng lần đầu tiên? – Andrew

Trả lời

2

Khi bạn đang sử dụng SWFObject để bao gồm flash, sẽ có một tham số trong phương thức embedSWF được gọi là 'params'. Bạn vượt qua nó một đối tượng vào nó như thế này:

swfobject.embedSwf(blah,blah,blah, { wmode:'transparent'}); 

more here

+0

Cảm ơn bạn đã trả lời. Tôi không có quyền kiểm soát phần mã swfobject. Khi mã của tôi chạy đối tượng đã được tạo. – Nir

+0

Đây là cách thích hợp để thực hiện. Bạn sẽ thực sự thấy nếu bạn có thể có được người kiểm soát mã swfobject để thêm tham số thêm. – jacobangel

0

Tôi gần như chắc chắn 100% rằng bạn không thể thay đổi các tham số wmode khi chạy. Ý tôi là, về mặt kỹ thuật bạn có thể, nhưng sẽ không có hiệu lực. Tôi thực sự ngạc nhiên khi bạn có bất kỳ nỗ lực thành công nào. Bạn đã thử thành công phiên bản trình phát Flash và trình duyệt nào?

Tôi xin lỗi tôi không thể tìm thấy bất kỳ liên kết chính thức để chứng minh quan điểm của tôi, nhưng tôi sẽ để lại cho bạn liên kết này rất thú vị về cách thức hoạt động (cập nhật đến máy nghe nhạc 10) wmode:

What does GPU acceleration mean?

Chúc mừng,

Juan

+0

Tôi sử dụng IE7 và trình phát flash v 9e. Phải có một số cách giải quyết. có lẽ khởi động lại trình phát hoặc tải lại phim ??? Bất kỳ ý tưởng nào cũng sẽ được đánh giá cao. Tôi bị kẹt. – Nir

1

Nó không phải đúng là một bộ phim flash cần phải được tái bản để thay đổi các tham số wmode - một huyền thoại của nó:

http://www.communitymx.com/content/article.cfm?cid=E5141

Tôi có cùng một vấn đề về trình đơn và tôi cần một số mã để thêm thông số wmode vào bất kỳ đối tượng flash nào được javascript gọi.

Tôi nghĩ rằng bài đăng gốc liên quan đến điều này, nhưng tôi không chắc chắn nên bắt đầu từ đâu và cần thêm thông tin.

10

Tôi đã thành công với mẹo nhỏ này:

$("embed").attr("wmode", "opaque").wrap('<div>'); 

Nó có hiệu quả vẽ lại các đối tượng flash, làm việc cho tôi.

+0

im không chắc chắn nếu điều này là phương pháp "tốt nhất" nhưng nó đã làm việc cho tôi. cảm ơn. –

+0

những gì một nhà vô địch! – ifightcrime

3

Giải pháp của Cirday nói chung là giải pháp phù hợp. Đây là phiên bản không phải jQuery, hoạt động trong IE, FF và Chrome:

var embed = document.getElementsByTagName('embed'); 
for(var i = 0; i < embed.length; i++){ 
    embed[i].setAttribute('wmode','opaque'); 
} 
// FF does a "live" array when working directly with elements, 
// so "els" changes as we add/remove elements; to avoid problems 
// with indexing, copy to a temporary array 
var els = document.getElementsByTagName('object'); 
var obj = []; 
for(var i = 0; i < els.length; i++){ 
    obj[i] = els[i]; 
} 
for(var i = 0; i < obj.length; i++){ 
    var param = document.createElement('param'); 
    param.setAttribute('name','wmode'); 
    param.setAttribute('value','opaque'); 
    obj[i].appendChild(param); 

    var wrapper = document.createElement('div'); 
    obj[i].parentNode.appendChild(wrapper); 

    if(obj[i].outerHTML){ 
     // IE 
     var html = obj[i].outerHTML; 
     obj[i].parentNode.removeChild(obj[i]); 
     wrapper.innerHTML = html; 
    }else{ 
     // ff/chrome 
     obj[i].parentNode.removeChild(obj[i]); 
     wrapper.appendChild(obj[i]); 
    } 
} 
+0

lưu ngày của tôi !!!!!! – Shawn

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