2013-09-02 19 views
83

tôi stumbled khi một cái gì đó kỳ lạ mà tôi chưa bao giờ thực sự thấy trước đây:Điểm của "javascript:" trong mã (không phải là URL) là gì?

javascript:a=a+10; 

Dòng trên có vẻ là đúng và đánh giá hạnh phúc (ít nhất là trong Firefox) giống như nếu phần javascript: bao giờ tồn tại.

Mặc dù tôi hiểu mục đích của kiểu cũ javascript:void(...)<a href=".."/> được sử dụng trong thời kỳ tối tăm DHTML, tôi không thể tìm ra bất kỳ cách sử dụng hữu ích nào của tiền tố này trong mã JavaScript đơn giản.

Có ý nghĩa đặc biệt nào không?

+8

Tôi không thể nói cho tất cả mọi người, nhưng tôi đã ** không bao giờ ** thấy điều này trong mã JS thuần túy. Bạn có thể đưa ra một ví dụ không? (* Nó có thể làm việc rất tốt, nhưng nó không nên có bất kỳ ảnh hưởng gì như vậy, vì vậy tôi rất muốn biết nơi bạn nhìn thấy điều này *) – h2ooooooo

+0

Bạn đã thấy điều đó ở đâu? – reporter

+1

Bạn đang viết nó ở đâu? là nó trong thẻ neo hoặc ở đâu? – pixelbyaj

Trả lời

97

"javascript:" là label. Nó được cho là được sử dụng để xác định một vòng lặp để bạn có thể sử dụng "break javascript;" để thoát ra khỏi nó, nhưng đang bị lạm dụng ở đây. Nó vô hại, nhưng có lẽ không phải là ý hay nếu thêm một nhãn vào một câu lệnh không phải là một vòng lặp.

+0

Thật kỳ lạ khi họ gọi nó là nhãn khi chính thức (như IANA), đó là loại tiền tố liên kết được gọi là [Lược đồ URI] (http://en.wikipedia.org/wiki/URI_scheme#Unofficial_but_common_URI_schemes). Đúng là nó không được đăng ký chính thức với IANA nhưng vẫn có thể sử dụng loại quy ước đặt tên này. –

+17

Trừ khi câu hỏi cho biết, nó không nằm trong một URI, nhưng trong mã đơn giản. Như Quentin gợi ý dưới đây, nó gần như chắc chắn gây ra bởi ai đó sao chép và dán mà không hiểu những gì họ đang làm. – Jules

+0

Có nhưng nó vẫn được sử dụng như [URL] (http://en.wikipedia.org/wiki/Uniform_resource_locator), ngay cả khi được sử dụng bên trong href, onclick vv Có, tôi đã nhận thấy rằng nhưng tôi đã quen với loại câu hỏi này đây. –

52

Đó là cú pháp hợp lệ (nó là label) nhưng vô dụng. Đó là cargo culting do mọi người sao chép/dán mã mà không hiểu nó.

+8

+1 cho liên kết tạo hàng hóa :). Sao chép/dán người dường như được phổ biến rộng rãi trong nhân viên công ty chịu trách nhiệm về thiết kế webapp nội bộ. – sitifensys

+10

Điều này sẽ không phải là bài viết wiki về giáo phái hàng hóa trong lập trình được nhiều hơn tại chỗ? [1] http://en.wikipedia.org/wiki/Cargo_cult_programming – AnyOneElse

-2

Tôi đồng ý về sự vô dụng của nó như một nhãn, nhưng trong một số trường hợp, nó vẫn hữu ích. Ví dụ: bạn cần thực thi một đoạn mã ngắn từ thanh địa chỉ hoặc viết một bookmarklet. Nhưng trong trường hợp này, javascript: sẽ giống như một sơ đồ giao thức giả.

+7

Điều đó thực sự hoàn toàn khác. 'javascript:' ở đầu URL làm cho trình duyệt thực thi phần còn lại của URL dưới dạng JavaScript. 'javascript:' ở đầu dòng * của mã JavaScript * là nhãn có tên "' javascript' ", giống như' foobar: 'là nhãn có tên" 'foobar'". Chúng hoàn toàn không liên quan và xảy ra trong các ngữ cảnh khác nhau, nhưng lại giống nhau. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label – Peeja

12

JavaScript cũng có thể được sử dụng trong số các trang web trong một HTML Application (HTA). Trong HTA, có thể sử dụng kết hợp của VBScript và JavaScript. Khi bạn sử dụng kịch bản trong ứng dụng của mình, như sau, ngôn ngữ kịch bản sẽ tự động được đặt thành VBScript.

<SCRIPT LANGUAGE='VBScript'> MsgBox 'Hi!'</SCRIPT> 

Vì vậy, phần tử có sự kiện JavaScript onclick, như sau, sẽ dẫn đến lỗi.

<a id="myLink" href="#" onclick="MyFunction();return false;">Click me!</a> 

Bạn có thể giải quyết điều này bằng cách thiết lập một cách rõ ràng bằng ngôn ngữ JavaScript bởi

<a id="myLink" href="#" onclick="javascript:alert('Javascript Executed!');return false;">Click me for Javascript!</a> 

Hoặc trong VBScript bởi

<a id="myLink" href="#" onclick='vbscript:msgbox "VBScript Executed!"'>Click me for VBScript!</a> 

Lưu ý: Tôi biết đây là một trường hợp góc, nhưng nó là một cách sử dụng thực tế của nhãn javascript: (chúng ta có thể gọi nó là nhãn trong ngữ cảnh này không?) mà tôi đã gặp khi tạo các ngôn ngữ HTA hỗn hợp.

+2

Một chủ đề nhỏ, vì câu hỏi ban đầu là về việc sử dụng nhãn trong mã javascript đơn giản, nhưng nó vẫn thú vị xem Internet Explorer có thể như thế nào;). – sitifensys

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