javascript

javascript: URL

[36] javascript: URL は、 Webブラウザーによって JavaScript として解釈され、実行される URL です。

仕様書

構文

[60] javascript: URL は、 URL scheme である javascript と区切りの : の後に JavaScriptソースコードを指定するものです。 ただし、ソースコードの部分はパーセント符号化を使うことができます。

  1. javascript:
  2. パーセント符号化された JavaScript コード

[61] URL query素片識別子は使うことができず、 ?# も含めてすべて JavaScript の一部と解釈されます >>67

[68] JavaScript コードの先頭の U+FEFF は、 BOM とみなされます >>67

[69] HTMLnavigate にはこれに対応する規定がありません。 JavaScript としては BOM でなくても U+FEFF は無視されるため、結果同じとなります。

navigate 演算

[21] URL schemejavascript:URL への navigate は、 navigate される閲覧文脈活性文書に関して次のような手順を実行するDOM操作タスク源タスクタスクキューに入れなければなりません >>35

[66] この手順は、 navigate アルゴリズム本体の変数である資源始点閲覧文脈を参照します。
  1. [78] 文書を、navigate される閲覧文脈活性文書に設定します。
  2. [82] 番地を、文書文書の番地に設定します。
  3. [85] 設定群を、文書Window環境設定群オブジェクトに設定します。
  4. [24] 始点閲覧文脈活性文書起源文書起源同じ起源でないなら、
    1. [79] 結果を、 undefined に設定します。
  5. [94] それ以外で、 資源other始点閲覧文脈閲覧文脈に関して Should navigation request of type from source in target be blocked by Content Security Policy?blocked を返すなら、
    1. [95] 結果を、 undefined に設定します。
  6. [52] それ以外なら、
    1. [53] スクリプトを、古典スクリプトを作成した結果に設定します。
      スクリプトソース
      資源URLURL直列化器を適用した結果の先頭の javascript: を除去し、文字列パーセント復号を適用した結果
      環境設定群オブジェクト
      設定群
      基底URL
      設定群API基底URL
      エラーミュートフラグ
      スクリプトfetchオプション群
      既定古典スクリプトfetchオプション群
    2. [54] 評価状態を、スクリプトについて古典スクリプトを実行した結果に設定します。
    3. [104] 評価状態abrupt completion の場合、 または評価状態の場合、
      1. [105] 結果を、 未定義に設定します。
    4. [106] それ以外の場合、
      1. [107] 結果を、 評価状態に設定します。
  7. [55] Type(結果)String 以外なら、
    1. [80] 応答を、新しい 204 応答に設定します。
      応答
      状態
      204
  8. [56] それ以外なら、
    1. [81] 応答を、新しい応答に設定します。
      応答
      状態
      200
      ヘッダーリスト
      Content-Type
      text/html
      Referrer-Policy
      設定群参照元ポリシー
      本体
      結果
      HTTPS状態
      設定群HTTPS状態
  9. [57] 応答navigateされる閲覧文脈についてnavigate応答の処理を実行します。

[58] <a href> に指定された時はその閲覧文脈で評価されますし、 <iframe src> に指定された時はその iframe入れ子閲覧文脈で評価されます >>35

[59] 多くの Bookmarklet は、 navigate により他のページに遷移することを防ぐため、 最後に void() を実行するなどして void を返すようにしています。

[63] この手順は、他の URL scheme なら fetch に相当するものです。 スクリプトを実行するという特別な性質から、 javascript: URL から HTTP応答を取得する処理は fetch ではなく navigate の一部として規定されています。このため fetch が直接呼び出される場面 (例えば <img src>) では javascript: URL を使うことができません。歴史的にはそのような場面でも JavaScript を実行していた Webブラウザーも存在していました。

歴史

[1] 不思議な指定? javascript:'css〜'について <http://www.parkcity.ne.jp/~chaichan/qanda/qa5032.htm>

javascript: scheme を data:about: のように使うという話です。 (このスレ自体はレベルが低くて参考にはなりません。)

GeckoWinIE 6 も、 ブラウザのアドレス欄に <javascript:"<p>abcdefg</p>"> のように入れてみると、評価結果を HTML として処理することが分かります。 (がおそらくその辺は適宜判断で、件の掲示板のスレのように CSS として解釈させることもできるのでしょう。)

これ、使い方によっては security hole になりかねないので注意する必要がありそうです・・って、 javascript: scheme 自体 security hole だから問題は変わっていませんか。 (名無しさん 2004-05-09 03:54:16 +00:00)

[2] そういえば javascript: scheme の仕様はやっぱり存在していないのか? Netscape の仕様書くらいはあるのか?

[3] >>2 JavaScript 1.3 のマニュアルより:

[4] Additional Topics — Using JavaScript URLs <http://devedge.netscape.com/library/manuals/2000/javascript/1.3/guide/advtopic.html#1004952>

[5] JavaScript Security <http://devedge.netscape.com/library/manuals/2000/javascript/1.3/guide/sec.html>

[6] <http://devedge.netscape.com/library/manuals/2000/javascript/1.3/reference/location.html#1203002>

URI scheme の説明。得られる情報は >>4 の subset。

[7] Displaying Errors with the JavaScript Console — Opening the JavaScript Console <http://devedge.netscape.com/library/manuals/2000/javascript/1.3/guide/console.html#1044393>

JavaScript 1.5 のマニュアルには javascript: URI についての言及はありませんでした。

[8] javascript Protocol (Internet Explorer - Asynchronous Pluggable Protocols) <http://msdn.microsoft.com/workshop/networking/predefined/javascript.asp>

[9] Web Forms 2.0>>3-7 の JavaScript 1.3 の説明書を javascript: の出典に選んでいます (DevEdge はなくなっちゃったけど)。 だから JS1.3 が一番まともな原典なのかも。

WHAT WG がいずれ javascript: の仕様も作ってくれると期待するのも一つの手(?)かも。 (名無しさん)

[10] 関連する URI scheme: ecmascript:, livescript:, mocha:, data: (名無しさん [sage])

[11] VRML における javascript: URI scheme の定義:

  1. VRML97, ISO/IEC 14772-1:1997 -- Annex C, ECMAScript Scripting Reference <http://www.web3d.org/x3d/specifications/vrml/ISO-IEC-14772-IS-VRML97WithAmendment1/part1/javascript.html#Access>
  2. VRML97, ISO/IEC 14772-1:1997 -- 4 Concepts <http://www.web3d.org/x3d/specifications/vrml/ISO-IEC-14772-IS-VRML97WithAmendment1/part1/concepts.html#4.5.4>

(名無しさん [sage])

[12] Extensible 3D (X3D), ISO/IEC 19775-1:200x, Part 1 -- 9 Networking component <http://www.web3d.org/x3d/specifications/ISO-IEC-19775-IS-X3DAbstractSpecification/Part01/components/networking.html#ScriptingLanguageProtocols>

>>11 X3D における定義。 javascript: は非推奨になり、代わりに ecmascript: が用意されています。 (名無しさん [sage])

[13] >>12 X3D Specification, ISO/IEC 19775-2:200x, Part 2, Annex A VRML97 Scripting Backwards Compatibility <http://www.web3d.org/x3d/specifications/ISO-IEC-19775-IS-X3DAbstractSpecification/Part02/vrml97.html#InlineScriptDefinition>

(名無しさん [sage])

[14] JavaScript in CSS files <http://www.quirksmode.org/css/javascript.html> (名無しさん)

[15] The 'javascript' resource identifier scheme <urn:ietf:id:draft-hoehrmann-javascript-ri-00> <http://www.websitedev.de/ietf/draft-hoehrmann-javascript-ri-00.txt> <http://ietfreport.isoc.org/idref/draft-hoehrmann-javascript-ri/>

(名無しさん 2006-10-28 15:11:00 +00:00)

[16] The 'javascript' scheme from Bjoern Hoehrmann on 2006-10-28 (uri@w3.org from October 2006) <http://www.w3.org/mid/nb66k29fqd915t8u7f3lsn6oj2ctj5og5t@hive.bjoern.hoehrmann.de>

(名無しさん 2006-10-28 15:19:14 +00:00)

[17] The 'javascript' scheme from Bjoern Hoehrmann on 2006-10-28 (uri@w3.org from October 2006) <http://www.w3.org/mid/nb66k29fqd915t8u7f3lsn6oj2ctj5og5t@hive.bjoern.hoehrmann.de>

(名無しさん 2006-10-28 15:19:32 +00:00)

[18] crisp’s blog &#187; Blog Archive &#187; The useless javascript: pseudo-protocol <http://therealcrisp.xs4all.nl/blog/2006/12/05/the-useless-javascript-pseudo-protocol/> (名無しさん 2006-12-18 23:05:31 +00:00)

[19] Firefox 1.5 の怪しい href="javascript:" 処理 (わかば 著, 2007-04-26 22:07:50 +09:00 版) <http://suika.fam.cx/~wakaba/d/d200704#d7-1> (名無しさん 2007-06-03 14:38:45 +00:00)

[20] Firefox 1.5 の怪しい href="javascript:" 処理 (わかば 著, 2007-04-26 22:07:50 +09:00 版) <http://suika.fam.cx/~wakaba/d/d200704#d7-1> (名無しさん )

[22] javascript: URI文字列を返した場合、 Firefox 1.5 は (aURI の直接指定なら) text/html と解釈しますが、 Opera 9 は現在の文書と同じ媒体型とみなすようです。

例えば、 text/xml 文書:

...
<a href="javascript:'a'">link</a>
...

... のリンクをたどると、 Firefoxa と表示しますが、 Opera整形式でないといってきます。

(名無しさん)

[23] seamonkey mozilla/dom/src/jsurl/ ( 版) <http://mxr.mozilla.org/seamonkey/source/dom/src/jsurl/>

[25] hoshikuzu | star_dust の書斎 - 2007-09-18 (2007-09-21 11:56:34 +09:00 版) <http://d.hatena.ne.jp/hoshikuzu/20070918#p1> (名無しさん)

[26] javascript: URIs ( 版) <http://suika.fam.cx/~wakaba/-temp/test/uri/javascript/test.cgi#> (名無しさん)

[28] JavaScriptを記述、実行を促す動画について‐ニコニコニュース ( 版) <http://blog.nicovideo.jp/niconews/2009/09/004642.html>

[29] [whatwg] Javascript: URLs as element attributes ( 版) <http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2010-November/029042.html>

[30] Inline Images on Web Pages ( ( 版)) <http://elf.org/essay/inline-image.html>

[31] The whatwg December 2010 Archive by thread ( ( 版)) <http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2010-December/thread.html>

[32] [whatwg] Javascript: URLs as element attributes ( 版) <http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2011-February/030360.html>

[33] Web Applications 1.0 r6139 Drop javascript: support from <img src>, <object data>, CSS, etc, etc, etc. ( ( 版)) <http://html5.org/tools/web-apps-tracker?from=6138&to=6139>

[37] Results for javascript: URL canonicalization (See <http://suika.fam.cx/www/url/perl-weburl/t/browsers/decomps.html?decomps-javascript.dat;compat>) ( ( 版)) <http://suika.fam.cx/gate/test-results/list/url-canon-javascript-20110604/all>

[38] [whatwg] Javascript: URLs as element attributes ( 版) <http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2011-June/031940.html>

[39] [whatwg] URL: javascript URLs ( ( 版)) <http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-September/037465.html>

[40] URL schemes - WHATWG Wiki ( ( 版)) <http://wiki.whatwg.org/wiki/URL_schemes>

[41] Client-Side JavaScript Reference ( ( 版)) <http://docs.oracle.com/cd/E19957-01/816-6408-10/location.htm#1193137>

[42] Web Applications 1.0 r5865 Use 'javascript: scheme' instead of 'javascript: protocol'. ( ( 版)) <http://html5.org/tools/web-apps-tracker?from=5864&to=5865>

[43] Web Applications 1.0 r2529 MAJOR CHANGES: Revamp the way scripts are specified, along with their interaction with resolving relative URLs, etc. Give enough detail to justify objects in the DOM not being garbage collected randomly when still in use. Define script groups, to handle scripts going away during document.open() and session history navigation. Define why and how setTimeout(), database transactions, etc, handle page transitions. Drop the terms 'with' and 'without' script, use script is 'enabled'/'disabled' instead. Define 'unload' and 'beforeunload'. Rework how onfoo= and .onfoo event handler attributes are defined. Rework how the content model of <noscript> is defined. Reword the way javascript: is defined to use the new terminology. Add a few notes of things that came up while I was doing all that.]] ( ( 版)) <http://html5.org/tools/web-apps-tracker?from=2528&to=2529>

[44] Web Applications 1.0 r2683 Prevent cross-origin javascript: navigation of browsing contexts. Define the base URL and document's address of pages generated by javascript: URLs. Minor editorial tweaks. ( ( 版)) <http://html5.org/tools/web-apps-tracker?from=2682&to=2683>

[45] URL schemes - WHATWG Wiki ( ( 版)) <http://wiki.whatwg.org/wiki/URL_schemes>

[46] Bug 13720 – Define javascript: processing entirely inline, and make it only happen in the navigation algorithm; then, remove special-casing elsewhere, and make it non-conforming in those places ( ( 版)) <https://www.w3.org/Bugs/Public/show_bug.cgi?id=13720>

[70] javascript: URL の処理は HTML Standard で規定されるようになりました。しかし処理方法だけで、意味と構文の規定は行われていません。

[71] WHATWG Wiki のページ (>>45) は、 javascript: URL の意味を規定する、実質的な仕様書となっています。 I-D (>>15) を廃止するものである >>45 と述べられています。

[47] IRC logs: freenode / #whatwg / 20131107 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20131107#l-781>

[48] Web Applications 1.0 r8285 Define the task settings for the javascript: task ( ( 版)) <http://html5.org/tools/web-apps-tracker?from=8284&to=8285>

[49] Web Applications 1.0 r8284 Move javascript: processing entirely into HTML, and fix its definitions to match reality better at the same time. ( ( 版)) <http://html5.org/tools/web-apps-tracker?from=8283&to=8284>

[50] IRC logs: freenode / #whatwg / 20131115 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20131115>

[51] Web Applications 1.0 r2046 Require that <script src=javascript:...></script> result in no script execution, for any value of '...', for compatibility with most UAs. ( 版) <https://html5.org/r/2046>

関連

[62] かつて IE 向けにイベントハンドラー内容属性の先頭に javascript: と書くことで JavaScript であると明示する構文がありましたが、 これは URL ではありません。

[64] Part2 - browsersec - Browser Security Handbook, part 2 - Browser Security Handbook - Google Project Hosting ( 版) <https://code.google.com/p/browsersec/wiki/Part2#URL_scheme_access_rules>

[72] Location Hack does not work · Issue #2232 · greasemonkey/greasemonkey ( 版) <https://github.com/greasemonkey/greasemonkey/issues/2232>

[73] 1192821 – Regression: 39.0.3: Greasemonkey's "Location hack" no longer works ( 版) <https://bugzilla.mozilla.org/show_bug.cgi?id=1192821>

[74] Location hack - GreaseSpot Wiki ( 版) <http://wiki.greasespot.net/Location_hack>

[75] Integrate Fetch into HTML · whatwg/html@7c5555a ( 版) <https://github.com/whatwg/html/commit/7c5555a16f2920c02244c10756bb2f1a11e87a22>

[76] Rewrite script execution on top of ES · whatwg/html@4891d18 ( 版) <https://github.com/whatwg/html/commit/4891d18aaf2df1d40aa61f467a5a10cfc19dd85d>

[77] Add <script type="module"> and module resolution/fetching/evaluation · whatwg/html@cd1a9fb ( 版) <https://github.com/whatwg/html/commit/cd1a9fb1e83f7d0bc30be8b34ecdaf444a0b19a4>

[83] Fix javascript: URL script execution · whatwg/html@6412172 ( 版) <https://github.com/whatwg/html/commit/64121722be80ca4e0ea426a085b5fb1a971303cb>

[84] Detail how javascript: return values become response bodies · whatwg/html@9997cd9 ( 版) <https://github.com/whatwg/html/commit/9997cd93c65a9f4a640a593c02f01c2c58924457>

[86] Integrate with the Referrer Policy spec, part 2 of n ( (domenic著, )) <https://github.com/whatwg/html/commit/176e74243c649b709b9959b7d08b327290c2f403>

[87] Get origin from a browsing context's active document ( (annevk著, )) <https://github.com/whatwg/html/commit/d727bf9335f32ab87109658d8e83b0ee3c2866bf>

[88] Extract bits out of a javascript URL through serialization ( (annevk著, )) <https://github.com/whatwg/html/commit/4113965994bb5d0c650bae13f28883d525a34002>

[89] Fix javascript: URL example explanation ( (domenic著, )) <https://github.com/whatwg/html/commit/cdf82d5def226004bb90479c284c22e329a4edbd>

[90] Navigate: remove "gone async" and define redirect handling (annevk著, ) <https://github.com/whatwg/html/commit/8b630f5e4fa2ec8b0999470d09490bffe6e9a1e3>

[91] Navigate: minor javascript URL fixup (annevk著, ) <https://github.com/whatwg/html/commit/8f34fc491631f5e940d50950567a4cecee104eec>

[92] Handle navigation to `javascript:` URLs as inline script. (#142) (@bzbarsky著, ) <https://github.com/w3c/webappsec-csp/commit/479bf6c6e891db0bb1cd7f71be764f3aff6a1a33>

[93] Apply CSP to javascript URLs in navigate (mikewest著, ) <https://github.com/whatwg/html/commit/9daeebfbdd068357257fcb69486d47a893c36f63>

[96] Remove javascript URL case from <a>/<area>/Location hash setter (annevk著, ) <https://github.com/whatwg/html/commit/deea9fba916cb6e66c7dcfc57442cf25ac0441a1>

[97] Remove javascript URL special case from the API (annevk著, ) <https://github.com/whatwg/url/commit/4bf85a08da18ef367e093426abef776d59e8fb7b>

[98] Editorial: move base URL from "module script" to "script" (domenic著, ) <https://github.com/whatwg/html/commit/5458513792ab00d58e6c91ba48faaa611d034a2e>

[99] Make integrity="" work on module scripts (domenic著, ) <https://github.com/whatwg/html/commit/9275d955dcd604e959cfcc672e0c234b1b8c00db>

[100] Clarify navigation behavior for 'script-src'. (mikewest著, ) <https://github.com/w3c/webappsec-csp/commit/7a4577c7975c8afdac0c0fc5a5493059b5660742>

[101] Do not use percent decode on strings (annevk著, ) <https://github.com/whatwg/html/commit/ce8404fa5d8c2c91725c5262fd69d0d45c227ec8>

[102] Do not use percent decode on strings by annevk · Pull Request #3111 · whatwg/html () <https://github.com/whatwg/html/pull/3111>

[103] Return the completion record result from running a script (mattto著, ) <https://github.com/whatwg/html/commit/ad3dda51552aeeeea60540c7f1b513fe45b486a5>

[108] Return the completion record result from running a script. by mattto · Pull Request #3888 · whatwg/html () <https://github.com/whatwg/html/pull/3888>

[109] Return empty on "do not run" for running a script (mattto著, ) <https://github.com/whatwg/html/commit/b71f885ec4f6e1a074157036d3deb9f1d6a9aa77>

[110] Return empty on "do not run" for running a script. by mattto · Pull Request #3907 · whatwg/html () <https://github.com/whatwg/html/pull/3907>

[111] Remove overridden reload concept (TimothyGu著, ) <https://github.com/whatwg/html/commit/6440ccae7340ea41d3eb5bf8ff0b3b27363eda85>