Câu hỏi:CƠ SỞ HREF, javascript, và Internet Explorer vs Firefox
IE và Firefox/Safari dường như để đối phó khác nhau với HREF BASE và Javascript yêu cầu loại window.location. Trước tiên, đây có phải là mô tả chính xác về sự cố không? Chuyện gì vậy? Và giải pháp cross-browser tốt nhất để giải quyết tình huống này là gì?
Bối cảnh:
Tôi có một sitelet PHP tập tin phẳng nhỏ (nó thực sự là một mẫu thử nghiệm khả năng sử dụng).
tôi tự động tạo ra giá trị href thẻ CƠ SỞ trong PHP, tức là nếu nó đang chạy trên máy chủ của công ty chúng tôi, đó là:
$basehref = 'http://www.example.com/alpha/bravo/UsabilityTest/';
và trên máy dev địa phương của tôi, đó là:
$basehref = 'http://ellen.local/delta/echo/foxtrot/UsabilityTest/';
Đối một trong các tác vụ, tôi thu thập một số đầu vào của người dùng, thực hiện một số biến đổi trên Javascript và gửi đến máy chủ bằng cách sử dụng mã như sau:
function allDone() {
// elided code for simplicity of stackoverflow question
var URI = "ProcessUserInput.php?";
URI = URI + "alphakeys=" + encodeURI(keys.join(","));
URI = URI + "&sortedvalues=" + encodeURI(values.join(","));
window.location = URI;
}
Cả tệp javascript (chứa hàm allDone()) và tập lệnh PHP xử lý (ProcessUserInput.php) nằm trong thư mục con của UsabilityTest. Nói cách khác, URL thực tế của họ là
http://www.example.com/alpha/bravo/UsabilityTest/foxtrot/ProcessUserInput.php aka
$basehref . '/foxtrot/ProcessUserInput.php'
Vấn đề
JavaScript của IE cơ bản dường như bỏ qua HREF BASE. Bộ xử lý javascript và PHP nằm trong cùng một thư mục, do đó, lệnh gọi tới ProcessUserInput.php hoạt động tốt. Các đầu vào được xử lý và tất cả mọi thứ hoạt động tốt.
Nhưng khi tôi thử nghiệm trên Firefox, JavaScript không xuất hiện để sử dụng HREF BASE, vì đầu ra của kịch bản được gửi đến
$basehref . '/ProcessUserInput.php'
phá vỡ này, bởi vì ProcessUserInput.php là trong thư mục con của basehref. Tuy nhiên, nếu tôi thêm tên thư mục con vào javascript, nó không còn hoạt động trong IE nữa.
Giải pháp?
tôi có thể nghĩ ra một số cách để giải quyết việc này:
- Trong javascript, đọc thuộc tính HREF của thẻ BASE và tự thêm vào trước để
var URI
trong javascript, gọi một URL tuyệt đối hoàn toàn giải quyết - Xử lý .js tệp bằng PHP và chèn biến số
$basehref
vào tập lệnh - Di chuyển tệp xung quanh
- Cái gì khác?
Tôi chắc chắn cũng phải có các cách khác để giải quyết vấn đề này. Cách tốt nhất để đối phó với BASE HREF trong JavaScript khi IE và Firefox áp dụng nó một cách khác nhau trong JavaScript là gì?
Không, điều này không giải quyết được vấn đề cơ sở href trong IE (như phiên bản 8). Tôi chỉ có một nụ cười trên khuôn mặt của mình khi tôi thấy cách đơn giản mà có thể được giải quyết, nhưng nó chỉ kéo dài trong một phút. –
Như đã đề cập bởi @Halil Özgür, đây không phải là câu trả lời được chấp nhận. – fritzmg