2013-10-24 20 views
11

Có ai biết phiên bản JavaScript nào được các tệp HTA sử dụng không.Phiên bản JavaScript trong HTA

Hiện nay việc tạo ra một số tác phẩm kịch bản - và cố gắng tận dụng Object.defineProperty

Khi chạy như một HTA - nó lỗi nêu Object không hỗ trợ tài sản hoặc phương pháp. Tôi đã chạy nó như một tập tin HTM chỉ để kiểm tra - và không có vấn đề gì cả.

Vì vậy, tôi chỉ có thể giả định rằng mshta.exe đang sử dụng một công cụ JavaScript cũ hơn. Bất cứ ai có thể xác nhận điều này?

Trả lời

14

Phiên bản JavaScript được sử dụng (hoặc JScript) phụ thuộc vào ba yếu tố: phiên bản Trình khám phá được cài đặt, khai báo loại tài liệu được sử dụng (DTD) và thẻ meta x-ua-compatible.

Mặc dù HTAs được chạy bởi mshta.exe, IE cung cấp JavaScript và công cụ hiển thị cho các ứng dụng, do đó mọi thứ đều nói về các phiên bản JS, viết tắt của các mô hình hộp, định vị, CSS vv và các phần tử API và HTML có sẵn.

Nếu bạn đã cài đặt IE11 vào hệ thống của mình, bạn có thể sử dụng phiên bản JavaScript mới nhất bằng cách sử dụng <!DOCTYPE html><meta http-equiv="x-ua-compatible" content="ie=edge" />.

Đương nhiên, đặt content thành IE=edge không ghi đè phiên bản cũ của IE đã cài đặt, chế độ có sẵn mới nhất được sử dụng. Thay vì edge, bạn có thể sử dụng số phiên bản IE để hạ cấp ứng dụng khi chạy với IE mới hơn.

Bỏ qua DTD phải luôn bỏ ứng dụng để chạy ở chế độ Quirks, trong trường hợp HTA tương tự như IE5. Tuy nhiên, trong trường hợp này, chế độ tài liệu có thể được thay đổi với x-ua-compatible, nhưng có một số mâu thuẫn ít nhất trong IE8 & 9. Luôn an toàn nhất để sử dụng DTD, nếu chế độ Quirks là không cần thiết.

Với DTD, nhưng không có x-ua-compatible thẻ meta HTA được chạy ở chế độ chuẩn IE7 (không hỗ trợ object.defineProperty(), được giới thiệu trong IE9).

Bạn thể đọc thêm về chủ đề này tại MSDN: Introduction to HTML Applications (HTAs)

IE info phiên bản cho JS and CSS được phổ biến tại MSDN:

JavaScript version information

CSS Compatibility in Internet Explorer

Đây một "an toàn bắt đầu "cho tệp HTA, khi bạn muốn sử dụng phiên bản mới nhất hiện có:

<!DOCTYPE html> 
<html> 
<head> 
<title>HTA</title> 
<meta http-equiv="x-ua-compatible" content="ie=edge" /> 
// All link, style and script tags, or any code should be placed below the five lines above 

Bạn cũng có thể sử dụng ScriptEngine chức năng để tìm ra các phiên bản mới nhất kịch bản:

ver = ScriptEngine() + ' V '; 
ver += ScriptEngineMajorVersion() + '.'; 
ver += ScriptEngineMinorVersion() + '.'; 
ver += ScriptEngineBuildVersion(); 
alert(ver); 

Thông báo, rằng đây chỉ hiển thị các phiên bản mới nhất được cung cấp bởi trình duyệt, chế độ tài liệu không có ảnh hưởng đến giá trị trả lại .

+2

Bất cứ khi nào tôi sử dụng thẻ meta, thuộc tính ứng dụng hta: của tôi không hoạt động. Nếu tôi bình luận nó thì họ sẽ làm. Có giải pháp nào không? – ndm13

+2

Không may là tôi không phải là giải pháp tốt cho việc này.Vì IE10, có vẻ như, nhiều thuộc tính HTA không được áp dụng nữa (Trong mã được phân tích cú pháp, thẻ 'HTA' được chuyển sang' body'). Trong IE9 họ vẫn có vẻ được tôn trọng. Tôi hầu như đã sử dụng 'IE = 9' thay vì' IE = cạnh', điều này cho phép xử lý sự kiện ít nhất hiện đại và hầu hết các thẻ HTML5, bao gồm 'svg' và' canvas'. – Teemu

+2

'IE = 9' hoạt động hoàn hảo! Tôi hy vọng điều này là cố định tại một số điểm, nhưng nó nghi ngờ khi họ dường như được loại bỏ này ra. Tôi sẽ không ngạc nhiên nếu phiên bản tiếp theo của Windows không hỗ trợ các tệp HTA. – ndm13

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