2010-07-30 34 views
5

Tôi có video youtube được nhúng mà tôi muốn áp dụng API YouTube. Tôi thêm các tham số url sử dụng jQuery như sau (demo):Bật API YouTube trên trình phát hiện tại

$(document).ready(function(){ 
var obj = $('object'); 
obj.find('embed').attr('src', function(i,s){return s+'&enablejsapi=1&version=3'}) 
obj.find('param[name=movie]').attr('value', function(i,v){return v+'&enablejsapi=1&version=3'}) 

$('.play').click(function(){ 
    obj.find('embed')[0].playVideo(); 
}); 
$('.pause').click(function(){ 
    obj.find('embed')[0].pauseVideo(); 
}) 
}); 

Phương pháp này hoạt động tuyệt vời trong Firefox, nhưng không phải ở tất cả trong IE hay Chrome (không chắc chắn về các trình duyệt khác). Vì vậy, câu hỏi của tôi là làm thế nào để tôi sửa đổi điều này để làm cho API làm việc trong các trình duyệt khác? Tôi có phải loại bỏ hoàn toàn đối tượng và thay thế nó bằng cách sử dụng SWFObject?

Lưu ý: Mã nhúng trực tiếp từ YouTube.


Cập nhật: tôi đã tìm ra nếu tôi loại bỏ các đối tượng, thêm các thông số url sau đó thêm các đối tượng trở lại, bây giờ tôi có thể lấy nó để làm việc trong Chrome, nhưng vẫn không IE (updated demo).


Phụ lục: Tại sao chức năng YouTube API không được kích hoạt khi đối tượng/nhúng đã bật mã trong đó? Tôi đang cố gắng tránh làm cho SWFObject trở nên phụ thuộc.

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="640" height="385"> 
<param name="movie" value="http://www.youtube.com/v/2Qj8PhxSnhg&amp;hl=en_US&amp;fs=1&enablejsapi=1&version=3"></param> 
<param name="allowFullScreen" value="true"></param> 
<param name="allowscriptaccess" value="always"></param> 
<embed src="http://www.youtube.com/v/2Qj8PhxSnhg&amp;hl=en_US&amp;fs=1&enablejsapi=1&version=3" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed> 
</object> 
+0

Các vấn đề dường như là Chrome và IE không cập nhật DOM/nhúng api cho phần tử khi bạn thay đổi thuộc tính src của nó. Mã này hoạt động nếu bạn thêm truy vấn trực tiếp vào mã. Trang web của bạn có yêu cầu trang web được thêm động không? – aolde

+0

@Manticore: Nó không phải là một yêu cầu, tôi đang cố gắng sửa đổi một plugin. Mã/liên kết video được thêm bởi người dùng trong danh sách, vì vậy tôi đã cố gắng xác định cách dễ nhất để thực hiện tác vụ này mà không đặt bất kỳ quy tắc nào như không có thẻ nhúng. – Mottie

+0

Tôi gặp vấn đề tương tự, và IE bắt đầu hoạt động phù hợp với tôi sau khi thêm thuộc tính classid = "clsid: D27CDB6E-AE6D-11cf-96B8-444553540000" mà SWFObject thêm vào. – kamens

Trả lời

2

Về swfobject - có. IE coi flash nhúng hơi khác (nhờ activex) so với tất cả các trình duyệt khác. hãy xem this article để biết lý do tại sao và SWFObject documentation để biết thêm thông tin.

Ngoài ra, gần đây tôi đã tạo một plugin jQuery để giúp kiểm soát trình phát được nhúng bằng API trình phát (về cơ bản những gì bạn đang làm).

Kiểm tra nó ra, nó là plugin jQuery TubePlayer - http://www.tikku.com/jquery-youtube-tubeplayer-plugin

+0

Vì vậy, có vẻ như bạn đang phụ thuộc vào plugin SWFObject. Tôi đang cố gắng tìm ra bản chất của vấn đề. Đào qua mã SWFObject để tìm sự khác biệt giữa các trình duyệt chưa được tiết lộ cho tôi. – Mottie

+0

Tôi đã từ bỏ và chỉ cần sử dụng plugin SWFObject, vì vậy tôi sẽ đánh dấu câu trả lời của bạn là chấp nhận mặc dù tôi vẫn không thể tìm thấy bản chất của vấn đề. Cảm ơn mặc dù! – Mottie

1

IE không được tìm $('object') có lẽ bởi vì bạn cần phải xác định đúng loại (làm một cảnh báo về độ dài obj), nhưng nếu bạn làm obj = $('embed') nó sẽ hoạt động. Nó có thể là khôn ngoan để bọc những thứ xung quanh theo một cách khác, đó là làm $('<div id="test/>') và sau đó nối thêm/đối tượng và thay đổi các giá trị srcmovie.

EDIT: IE dường như không đăng ký object cho đến khi nó có một type hoặc clsid thuộc tính nhất định, ví dụ như

EDIT # 2: Bạn có thể có lẽ chỉ kiểm tra việc outerHTML của phần tử đối tượng @http://savedbythegoog.appspot.com/retrieve_cache?unique_id=http://code.google.com/apis/ajax/playground/samples/boilerplateHTML/youtube/chromeless.html|http://code.google.com/apis/ajax/playground/samples/js/youtube/chromeless.js&defaultSample=true

+0

Tôi không thể sao chép vấn đề với IE không tìm thấy '$ ('đối tượng')' ngay cả khi không có CSID, ít nhất là trong IE8. Tôi đã thử thêm HTML thô bằng cách sử dụng 'outerHTML' làm tệp SWFObject, nhưng dường như nó không tạo ra bất kỳ sự khác biệt nào. – Mottie

+0

Tôi đã thử nghiệm trong IE6, fyi .. –

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