Tôi đã thực hiện rất nhiều nghiên cứu về Lịch trình nhúng của Twitter. Tôi đã cố gắng tìm hiểu xem liệu có thể biết thời gian tải xong và hiển thị trên trang hay không. Điều này issue has been requested, nhưng vẫn chưa được thực hiện. Tôi đã đi đến một kết thúc chết một am hy vọng ai đó có thể giúp tôi tìm ra giải pháp. Dưới đây là những gì tôi đã tìm thấy cho đến nay:Twitter Embedded Timeline Callback
Mã này để thêm một Timeline Embedded:
<a class="twitter-timeline" href="https://twitter.com/twitterapi" data-widget-id="YOUR- WIDGET-ID-HERE">Tweets by @twitterapi</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
gì sẽ xảy ra khi kịch bản được điều hành:
Các kịch bản thay thế thẻ
<a>
với một phần tử .Nội dung của
iframe
đã sẵn sàng, nhưng hình đại diện và nút 'follow @username' không được tải xuống xong. Thuộc tínhheight
củaiframe
được đặt thành 0 để bạn không thấy nội dung mà không có hình ảnh.Hình ảnh đại diện được tải xuống, nhưng nút 'follow @username' vẫn đang được tải xuống. Nội dung vẫn không hiển thị.
Nút 'follow @username' đã hoàn tất tải xuống. Thuộc tính
height
củaiframe
được đặt để phù hợp với chiều cao của nội dung củaiframe
. Dòng thời gian hiện có thể nhìn thấy.
Bây giờ, tôi đã thử tất cả mọi thứ tôi có thể nghĩ ra để tìm ra khi thời gian được hiển thị (mà không sử dụng setTimeout/interval). Mục đích là để có một sự kiện/chức năng/cuộc gọi lại không bỏ phiếu. Dưới đây là những gì tôi đã cố gắng cho đến nay nhưng không thành công:
- Thiết thính giả sự kiện trên
iframe
(nhưonload
,DOMContentLoaded
,DOMFrameContentLoaded
, vv) để biết khi nào nội dung đã tải xong. Điều này không hoạt động doiframe
không có thuộc tínhsrc
. Sau khi đi qua các mã xấu xí (tôi đã không thể tìm thấy một phiên bản không nén), tôi đoán là nó đang sử dụng viết để thêm nội dung vào phần thân củaiframe
. - Đặt trình xử lý sự kiện để biết thời điểm các thay đổi thuộc tính
height
trên sốiframe
. Về mặt lý thuyết, sự kiện này sẽ kích hoạt ba lần: đầu tiên khi nội dung tải, thứ hai khiheight
được đặt thành 0 và thứ ba khiheight
được đặt để hiển thị dòng thời gian được tải đầy đủ. Tuy nhiên, tôi chỉ có thể có được sự kiện để bắn cho hai trường hợp đầu tiên và không bao giờ cho các thứ ba (một trong những tôi thực sự muốn). Tôi đã sử dụngDOMSubtreeModified
,onreadystatechange
vàonpropertychange
, nhưng chỉDOMSubtreeModified
làm việc để kích hoạt sự kiện. - Đặt trình xử lý sự kiện trên các cotet của
iframe
. Vì JavaScript có thể truy cập vào bên trong củaiframe
từ Twitter, bạn có thể lấy bất kỳ phần tử nào bên trongiframe
(chẳng hạn nhưdocument
hoặcwindow
). Tuy nhiên, thêmonload
,DOMContentLoaded
hoặcDOMFrameContentLoaded
trình xử lý sự kiện trênwindow
hoặcdocument
của sốiframe
vẫn không kích hoạt các sự kiện đó. - Đặt trình xử lý sự kiện trên nút 'theo dõi @ tên người dùng'. Nút thực sự là một
iframe
có thuộc tínhsrc
. Bằng cách đặt sự kiệnonload
, sự kiện sẽ bị kích hoạt khi được tải. Tuy nhiên, sự kiệnonload
sẽ luôn kích hoạt hai lần. Lần đầu tiên khi tải xuống xong và lần thứ hai khi quá trình xử lý hoàn tất. Ngay sau lần kích hoạt thứ hai, dòng thời gian sẽ được hiển thị. Để thực hiện điều này khá là hack mặc dù tôi đoán tất cả mọi thứ là vì bạn phải đợi nội dung củaiframe
để tải, tiếp cận bên trong và nhận được 'follow @username'iframe
, đặt sự kiệnonload
trên đó, sau đó đợi sự kiện thứ hai để bắn. - Sử dụng chức năng
twttr.widgets.createTimeline()
, có tham số tùy chọn cho gọi lại. Tuy nhiên, gọi lại được gọi khi nội dung đã sẵn sàng (bước 2), nhưng không phải khi khung nội tuyến hiển thị (bước 4).
Có thể còn một vài kết hợp khác mà tôi đã quên tại thời điểm này. Tôi biết có một số github gist sử dụng Twitter widget.js
, nhưng thêm gọi lại cho nó. Tôi không thể làm việc này được.
Xin lỗi vì câu hỏi đăng nhập, nhưng tôi hy vọng ai đó có thể trợ giúp. Cảm ơn.
Máy cạo râu hoạt động như thế nào? Tôi đã xem xét và bạn đang truy cập nội dung của một Khung nội tuyến từ một miền khác thông qua tập lệnh, điều này gây ra lỗi bảo mật. Đó là một ý tưởng tuyệt vời, tôi đã tự hỏi nếu bạn đã làm một cái gì đó thêm để có được xung quanh đó. – Andy
@Andy, trình cố định không cố gắng truy cập IFrame từ một tên miền khác. Tiện ích Twitter bao gồm một tập lệnh tạo IFrame động nhưng không tải trực tiếp từ một miền khác, do đó bạn không gặp phải bất kỳ lỗi bảo mật nào khi cố gắng xóa nó. – joom
Tôi không biết về 'twttr.events.bind'. Dường như nó cũng cháy vào đúng thời điểm. Đối với bất kỳ ai khác tự hỏi về những sự kiện nào có thể ràng buộc, bạn có thể tìm thấy thông tin về tất cả các sự kiện tại đây: https://dev.twitter.com/docs/tfw/events. Ngoài ra, chỉ có IE8 trở xuống không hỗ trợ sự kiện tải lên cho tập lệnh. IE9 + (xem http://pieisgood.org/test/script-link-events/). –