Tôi hiện đang gặp lỗi trong mã FacePile của Facebook và tôi bị bối rối bởi nguyên nhân.'Ngày' không được xác định trong IE9 trong javascript được tải bởi FacePile
facepile.php tải một kịch bản đó, trong số những thứ khác, có những dòng này (khi khá-in):
...
o = document.createElement('script');
o.src = l[n];
o.async = true;
o.onload = h;
o.onreadystatechange = function() {
if (o.readyState in c) {
h();
o.onreadystatechange = null;
}
};
d++;
a.appendChild(o);
...
(một document.body ==, d ++ là không thích hợp ở đây)
Mã này tải một kịch bản với src = http://static.ak.fbcdn.net/rsrc.php/v1/yW/r/pmR8u_Z_9_0.js
hoặc một cái gì đó không kém phần khó hiểu (tên tệp thay đổi đôi khi).
Trong kịch bản đó, có những dòng này ở phía trên rất (cũng có khi khá-in):
/*1331654128,176820664*/
if (window.CavalryLogger) {
CavalryLogger.start_js(["\/8f24"]);
}
window.__DEV__ = window.__DEV__ || 0;
if (!window.skipDomainLower && document.domain.toLowerCase().match(/(^|\.)facebook\..*/))
document.domain = window.location.hostname.replace(/^.*(facebook\..*)$/i, '$1');
function bagofholding() {
}
function bagof(a) {
return function() {
return a;
};
}
if (!Date.now)
Date.now = function now() {
return new Date().getTime();
};
if (!Array.isArray)
Array.isArray = function(a) {
return Object.prototype.toString.call(a) == '[object Array]';
};
...
Và tôi nhận được một lỗi mà nói "SCRIPT5009: 'Ngày' là không xác định", ngay tại phần if (!Date.now)
. Gỡ lỗi gần điểm đó cho thấy rằng Date
, Array
, Object
, Function
, v.v. đều không được xác định.
Er ... như thế nào? window
tồn tại, cũng như document
(mặc dù document.body
là null) và một số ít người khác, nhưng nhiều đối tượng được xác định trước thì không. Các phiên bản trước của IE dường như không có vấn đề này, cũng như không làm bất kỳ trình duyệt nào khác, nhưng nhiều máy chạy IE9 (bao gồm cả máy ảo sạch) đều có cùng vấn đề.
Tôi nghi ngờ tôi có thể làm bất cứ điều gì về nó, nhưng tôi là rất tò mò điều này xảy ra như thế nào/vấn đề cơ bản là gì. Có ai biết, hoặc họ có thể chỉ cho tôi một cái gì đó có thể giúp đỡ?
- chỉnh sửa:
Trước khi đăng câu hỏi này, tôi đã tìm thấy trang web này: http://www.guypo.com/technical/ies-premature-execution-problem/
Trong khi nó có vẻ (và vẫn làm) như nó có thể là nguồn gốc của vấn đề, tôi có thể' t sao chép nó trong bất kỳ hoàn cảnh nhỏ hơn. Tất cả các kết hợp tôi đã thử vẫn có ngày, vv được xác định; điều đó không quá ngạc nhiên, vì nếu không tôi chắc chắn rằng những người khác sẽ gặp nhiều vấn đề hơn với IE.
Các đối tượng dựng sẵn như Ngày, Mảng, v.v. phải luôn sẵn có trong ngữ cảnh chung. Làm thế nào một hàm có thể thực thi nếu không có hàm tạo hàm nào? Vấn đề kỳ lạ thực sự. – RobG
thử mà không cần "o.async = true;" –
Tôi không thể - mã này nằm trong mã của Facebook và tôi không thể tái tạo nó bằng bất kỳ mã nào của riêng tôi (mặc dù tôi chưa thử phản ánh toàn bộ điều này. Tôi có thể làm điều đó sau). Trừ khi IE9 có một số cách để chỉnh sửa javascript hiện đang chạy? – Groxx