2010-10-18 36 views
10

Tôi đang cố gắng sử dụng hiệu ứng tỷ lệ từ thư viện giao diện người dùng jQuery trên phần tử trình bao chứa đối tượng Flash.Tôi có thể di chuyển đối tượng Flash trong DOM mà không cần tải lại không?

Sự cố tôi gặp phải là nội dung của trình bao bọc của tôi tự động được chuyển vào trình bao bọc khác (.ui-effects-wrapper) và khi điều này xảy ra khi tải lại đối tượng Flash. Tất nhiên, vấn đề cụ thể ở đây phải làm với chiến thuật được sử dụng bởi jQuery UI - nhưng nói chung, có thể di chuyển một đối tượng Flash trong DOM mà không cần tải lại nó không? Không.

Trả lời

13

Tôi chỉ biết cách hoạt động của tính năng này trong Gecko (công cụ hiển thị của Firefox). Trong công cụ đó, không, bạn không thể di chuyển <object> hoặc <embed> trong cây DOM mà không cần tải lại đối tượng Flash được liên kết. Nó thực sự tồi tệ hơn thế: bạn không thể làm bất cứ điều gì có thể gây ra hộp CSS được rút ra bởi đối tượng Flash sẽ bị hủy. Gecko xử lý các hộp CSS là không lâu; hầu như bất kỳ sửa đổi DOM nào liên quan đến subtree có chứa <object> sẽ phá hủy hộp CSS được liên kết, và như vậy sẽ có bất kỳ số lượng thao tác CSS nào khác nhau từ tập rõ ràng (đặt display:none) đến tối nghĩa (thay đổi opacity hoặc overflow). Nhưng trạng thái của plugin được gắn vào cây hộp chứ không phải là cây DOM, vì vậy nếu hộp bị hủy và tái tạo, plugin sẽ được tải lại.

Điều này đã được chấp nhận là lỗi — bug 90268, chín tuổi theo văn bản này. Xem, đặc biệt, comment 80 cho lời giải thích thực sự dài về lý do tại sao điều này là và tại sao, buồn để nói, tôi sẽ không ngạc nhiên nếu nó đã đi thêm chín năm mà không nhận được cố định.

Có thể bạn có thể giải quyết vấn đề này bằng cách xuất tất cả trạng thái plugin của bạn sang JavaScript trong trang chứa.

CẬP NHẬT: Chỉ hai năm sau, lỗi đã được sửa! Bản sửa lỗi sẽ có trong Firefox 13, hiện được lên lịch phát hành vào ngày 5 tháng 6 năm 2012; nếu bạn muốn nó sớm hơn, nó sẽ có trong "beta" vào ngày 24 tháng 4 và "aurora" ngay sau ngày 13 tháng 3 (hôm nay là ngày hôm nay). Josh Aas xứng đáng nhận được nhiều tín dụng để đấu vật này với mặt đất — bản sửa lỗi đã trải qua 54 bản sửa đổi và sửa đổi hơn 3.000 dòng mã.

+0

Một câu trả lời rất thông minh, cảm ơn thời gian của bạn ... Tôi đặc biệt thích đọc lỗi 90268! Trong khi tôi không gần gũi hơn với việc di chuyển một đối tượng Flash, tôi muốn nói rằng các giới hạn như thế này cũng quan trọng như việc biết tôi có thể làm gì. – JKS

+1

Bạn được chào đón. Nó xảy ra với tôi rằng, tùy thuộc vào mục tiêu lớn hơn của bạn là gì, bạn có thể thoát khỏi một thùng chứa 'position: absolute' có thuộc tính' top'/'left' mà bạn thao tác từ JS? – zwol

+0

Vậy, đây có phải là vấn đề cụ thể của Gecko không?Nó không xảy ra với các trình duyệt khác, phải không? – jayarjo

2

Tôi không biết liệu bạn có thể thực hiện công việc này trong các trình duyệt gặp phải sự cố này hay không - mà từ một số thử nghiệm dường như bao gồm tại thời điểm viết các phiên bản mới nhất của Chrome (Linux), Firefox (Win/Linux), Safari (Win) và Opera (Win/Linux)) - nhưng trong Internet Explorer (hoặc ít nhất là trong IE6 và IE8, trên Windows XP) thì applet Flash không được tải lại. Tuy nhiên trong IE có một số sự kỳ quặc với SWFObject gọi là 'nhúng' gọi lại hai lần khi nó được reinserted vào cây tài liệu. Vì vậy, tôi đã quyết định chỉ không bao giờ cố gắng làm một cái gì đó như thế này và lưu trữ trạng thái Flash của tôi trong JavaScript như đã được đề xuất trong câu trả lời đầu tiên.

Dù sao, xin lỗi vì không cung cấp câu trả lời thực, nhưng vì đây là kết quả đầu tiên của google khi googling cho cùng một vấn đề tôi cảm thấy nó có thể hữu ích để liệt kê những trình duyệt tôi biết có vấn đề này (tôi sẽ trả lời bình luận của jayarjo nhưng tôi chưa có đủ danh tiếng cho điều đó: /)

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