PreloadJS ทำงานไม่ถูกต้องสำหรับองค์ประกอบที่ต่อท้ายในภายหลัง (ใน Firefox)

ฉันมีปัญหากับการทำงานของ PreloadJS บน Firefox ที่จริงแล้วมันยากสำหรับฉันที่จะเชื่อว่าไม่มีใครประสบปัญหานี้มาก่อน (ไม่พบใครที่อธิบายพฤติกรรมแบบเดียวกัน) ดังนั้นบางทีฉันอาจทำอะไรผิดไป ... มันทำงานได้ดีใน Google Chrome ผ่าน

นี่คือส่วนของ JS:

$(document).ready(function () {
  var preloadBG = new createjs.LoadQueue();
   preloadBG.addEventListener("fileload", function(){
     $('#light').css("background-color","green");
     $("#container").append('<div id="image"></div>');
   });
   preloadBG.loadFile('http://i.imgur.com/ifvZ5Ss.jpg');
});

ดูตัวอย่างที่นี่: http://codepen.io/Deto15/pen/KdpRdx

คุณจะสังเกตเห็นลักษณะการทำงานที่ฉันอธิบายหากคุณเรียกใช้ด้วย Firefox และ Ctrl+F5

โดยพื้นฐานแล้วสิ่งที่ฉันทำที่นี่คือ:

  1. บน domready PreloadJS จะโหลดอิมเมจล่วงหน้า (ยังไม่ได้ใช้จริงที่ใดก็ได้บนหน้า)
  2. เมื่อโหลดล่วงหน้าเสร็จแล้ว วงกลมสีแดงจะเปลี่ยนเป็นสีเขียว
  3. หลังจากที่ div ใหม่นั้นถูกต่อท้ายเข้ากับเพจ และ div นั้นใช้รูปภาพที่โหลดไว้ก่อนหน้านี้เป็นภาพพื้นหลัง

ลักษณะการทำงานใน Chrome คือรูปภาพนั้นจะปรากฏขึ้นในช่วงเวลาเดียวกับที่วงกลมเปลี่ยนสี และนั่นก็สมเหตุสมผลดีเนื่องจากมีการโหลดไว้ล่วงหน้าแล้ว บน Firefox วงกลมจะเปลี่ยนสีและเกิดความล่าช้าก่อนที่ภาพจะปรากฏขึ้น ราวกับว่า Firefox กำลังโหลดอีกครั้ง

มีคำอธิบายเกี่ยวกับพฤติกรรมนี้และวิธีแก้ไขปัญหานี้หรือไม่?


person Chris Lejman    schedule 08.09.2015    source แหล่งที่มา


คำตอบ (1)


เปรียบเทียบทั้งสองในเครื่องมือ dev:

การเปรียบเทียบ Firefox และ Chrome

จากสิ่งที่ฉันเห็น Firefox จะไม่ดึงภาพจากแคชในขณะที่ Chrome ทำ

วิธีแก้ปัญหาหนึ่งที่เป็นไปได้อาจเกี่ยวข้องกับขนาดรูปภาพ ดังรายละเอียดที่นี่

ฉันขอแนะนำให้ทดสอบด้วยรูปภาพขนาดเล็กก่อนเพื่อดูว่าสามารถแก้ไขปัญหาแคชได้หรือไม่

person Brian Liu    schedule 09.09.2015
comment
ฉันได้ทดสอบข้อเสนอแนะของคุณแล้ว แต่ไม่ได้สังเกตเห็นโอกาสใด ๆ :( ขอขอบคุณที่แจ้งว่าปัญหาไม่เกี่ยวข้องกับ PreloadJS จริงๆ แต่เป็น Firefox เอง ฉันจัดการเพื่อหาวิธีแก้ไข แต่ HTML สุดท้ายแตกต่างออกไป ดังนั้น ฉันไม่แน่ใจว่าจะสามารถใช้มันในโปรเจ็กต์ของฉันได้หรือไม่ อย่างไรก็ตาม วิธีแก้ไขของฉันคือถ้าฉันจะใช้เพย์โหลดที่ส่งคืนโดยเหตุการณ์ที่เสร็จสมบูรณ์ของ PreloadJS เพื่อต่อท้ายแท็ก ‹img› ที่สร้างขึ้น , Firefox จะแสดงภาพโดยไม่ต้องดาวน์โหลดเป็นครั้งที่สอง ไม่ใช่สิ่งที่ผมตั้งใจไว้จริงๆ แต่ทิ้งไว้ที่นี่เผื่อมีคนประสบปัญหาเดียวกัน - person Chris Lejman; 12.09.2015