Moai+Easter 上級マニュアル

Moai Manual Advanced Manual Annoucement FAQ
ご案内 Moaiエンジン CustomBoyエンジン HowToコンパイル Moai CGI Developers
Overview and Tutorial Cookie Hints PostVars Hints Fingerprint Hints Snippet Hints Futaba Note

はじめに

ここではCustomBoyが取り扱うSnippetコードの真偽値に関する情報を列挙する.

これらはBrowser毎に異なる真偽値のパターンを持つため、Browser解析等で有用である.
そしてその情報はCustomBoyエンジンのKnowledge-baseにも内蔵されており、通常は特にユーザが何も設定せずとも、CustomBoyあるいはVirtualUSERSの実行結果に自動的に反映される.

一般ユーザがこの記事に記載されたパターンの詳細を気にする必要は全くないが、万一CustomBoyエンジンが内蔵するKnowledge-baseでは問題が発生した場合は、
ここにある情報を元にエキスパートユーザが手動でそのパターンを修正することもできる.


目次



Snp_LtIE6

以下のJavascriptコードを実行した結果である.
typeof window.addEventListener == 'undefined'
&& typeof document.documentElement.style.maxHeight == 'undefined'
IE6以前のみtrue

目次に戻る

Snp_LtIE7

以下のJavascriptコードを実行した結果である.
typeof window.addEventListener == 'undefined'
&& typeof document.querySelectorAll == 'undefined'
IE7以前のみtrue

目次に戻る

Snp_LtIE8

以下のJavascriptコードを実行した結果である.
typeof window.addEventListener == 'undefined'
&& typeof document.getElementsByClassName == 'undefined'
IE8以前のみtrue

目次に戻る

Snp_IE9

以下のJavascriptコードを実行した結果である.
!!document.uniqueID && document.documentMode==9
IE9のみtrue

目次に戻る

Snp_IE10

以下のJavascriptコードを実行した結果である.
!!document.uniqueID && document.documentMode==10
IE10のみtrue

目次に戻る

Snp_IE11

以下のJavascriptコードを実行した結果である.
!!document.uniqueID && document.documentMode==11
IE11のみtrue

目次に戻る

Snp_Trident

以下のJavascriptコードを実行した結果である.
!!document.uniqueID
Trident Rendering Engineを使っている場合はtrue.
IEはこれを使っているためtrue.

目次に戻る

Snp_Edge

以下のJavascriptコードを実行した結果である.
'-ms-scroll-limit' in document.documentElement.style
   && '-ms-ime-align' in document.documentElement.style
   && !window.navigator.msPointerEnabled
色々並べてあるが上二つはすべてMS製Browserに存在する特性であり、最後にIEのみに存在する特性を除外していることから、Edgeか否かを判定する.
Edgeの場合はtrue.

目次に戻る

Snp_Gecko

以下のJavascriptコードを実行した結果である.
'MozAppearance' in document.documentElement.style
Gecko Rendering Engineを使っている場合はtrue
Firefoxはこれを使っているためtrue.

目次に戻る

Snp_MozillaSidebar

以下のJavascriptコードを実行した結果である.
!!window.sidebar
Mozilla Sidebarが存在する場合はtrue.
Firefoxにはこれが存在するためtrue.

目次に戻る

Snp_NavigatorOnline

以下のJavascriptコードを実行した結果である.
typeof window.navigator.onLine != 'undefined'
Browserがオンラインで動作しているかどうかを示す真偽値を返す.

目次に戻る

Snp_SessionStorage

以下のJavascriptコードを実行した結果である.
!!window.sessionStorage
BrowserにsessionStorage機構が存在するか否かを示す.
Browserの対応状況は以下が目安である(MDNによる).
  • Chrome: 5以上
  • Firefox(Gecko): 2以上
  • IE: 8以上
  • Opera: 10.50以上
  • Safari(Webkit): 4以上
  • Android: 2.1以上
  • Opera Mobile: 11以上
  • Safari Mobile: iOS 3.2以上

目次に戻る

Snp_FunctionX5

以下のJavascriptコードを実行した結果である.
(function x(){})[-5] == 'x'
このFunctionX5テストとは、Firefox Ver3.xにのみ存在するコード特性を検査するというもの.
'function x(){}' を文字列として見た場合、その -5 番目の文字(最後から5番目)は 'x' となっている.
Firefox Ver3.x ではこのような暗黙の文字列変換が行われるようで、その特性が存在するかを検証するコードである.
Firefox Ver3.xのみtrue.

目次に戻る

Snp_DocCurrentScript

以下のJavascriptコードを実行した結果である.
typeof document.currentScript != 'undefined'
以下の環境においてtrue.
  • Chrome: 29以上
  • Firefox(Gecko): 4以上
  • Opera: 16以上

目次に戻る

Snp_EventSource

以下のJavascriptコードを実行した結果である.
typeof(EventSource) != 'undefined'
以下の環境においてtrue.
  • Chrome: 9以上
  • Firefox(Gecko): 6以上
  • Opera: 11以上

目次に戻る

Snp_Crypto

以下のJavascriptコードを実行した結果である.
!!window.crypto && !!window.crypto.getRandomValues
以下の環境においてtrue.
  • Chrome: 11以上
  • Firefox(Gecko): 21以上
  • IE: 11以上
  • Opera: 15以上
  • Safari: 3.1以上

目次に戻る

Snp_PerformanceNow

以下のJavascriptコードを実行した結果である.
!!window.performance && !!window.performance.now
以下の環境においてtrue.
  • Chrome: 20以上
  • Firefox(Gecko): 15以上
  • IE: 10以上
  • Opera: 15以上
  • Safari: 8以上

目次に戻る

Snp_AudioContext

以下のJavascriptコードを実行した結果である.
!!window.AudioContext
以下の環境においてtrue.
  • Chrome: 10以上
  • Firefox(Gecko): 25以上
  • Opera: 15以上
  • Safari: 6以上

目次に戻る

Snp_IndexedDB

以下のJavascriptコードを実行した結果である.
!!window.indexedDB
これはBrowserにindexedDB機構が存在するか否かを示す.
Browserの対応状況は以下が目安である(MDNによる).
  • Chrome: 23以上
  • Firefox(Gecko): 10以上
  • IE: 10以上
  • Opera: 15以上
  • Safari(Webkit): 7.1以上
  • Edge: OK
  • Android: 4.4以上
  • Firefox Mobile: 22以上
  • Firefox OS: 1.0.1以上
  • Opera Mobile: 22以上
  • Safari Mobile: 8以上

目次に戻る

Snp_WindowStyles

以下のJavascriptコードを実行した結果である.
!!window.styles
このSnippetはふたばちゃんねるにおいて独自に設定されているものである.
(少なくとも他のサイトでは、私はこのようなコードを見たことがない)
そしてMDNなどのよく知られたどのドキュメントを参照しても、window objectの中にstylesというpropertyは記載されていない.

果たしてこのpropertyを持つBrowserが世界に存在するのであろうか?
これまで私が試したすべてのBrowserにおいて、このコードがtrueとなるものは発見されなかった.

ちなみにwindow objectの中のstatusというpropertyならば、Gecko 1.9.1以降ならば存在する.

目次に戻る

Snp_SendBeacon

以下のJavascriptコードを実行した結果である.
!!window.navigator.sendBeacon
以下の環境においてtrue.
  • Chrome: 39以上
  • Firefox(Gecko): 31以上
  • Opera: 26以上

目次に戻る

Snp_GetGamepads

以下のJavascriptコードを実行した結果である.
!!navigator.getGamepads
以下の環境においてtrue.
  • Chrome: 21以上
  • Firefox(Gecko): 29以上
  • Opera: 15以上

目次に戻る

Snp_NavLanguages

以下のJavascriptコードを実行した結果である.
!!window.navigator.languages
以下の環境においてtrue.
  • Chrome: 32以上
  • Firefox(Gecko): 32以上

目次に戻る

Snp_NavMediaDevices

以下のJavascriptコードを実行した結果である.
!!window.navigator.mediaDevices
以下の環境においてtrue.
  • Chrome: 51以上
  • Firefox(Gecko): 36以上

目次に戻る

Snp_WinCaches

以下のJavascriptコードを実行した結果である.
!!window.caches
以下の環境においてtrue.
  • Chrome: 43以上
  • Firefox(Gecko): 39以上

目次に戻る

Snp_CreateImageBitmap

以下のJavascriptコードを実行した結果である.
!!window.createImageBitmap
以下の環境においてtrue.
  • Chrome: 50以上
  • Firefox(Gecko): 42以上

目次に戻る

Snp_Onstorage

以下のJavascriptコードを実行した結果である.
typeof window.onstorage!='undefined'
以下の環境においてtrue.
  • Firefox(Gecko): 45以上

目次に戻る

Snp_NavGetBattery

以下のJavascriptコードを実行した結果である.
!!window.navigator.getBattery
以下の環境においてtrue.
  • Chrome: 39以上
  • Firefox(Gecko): ?
  • Opera: 25以上

目次に戻る

Snp_Presto

以下のJavascriptコードを実行した結果である.
!!window.opera
Operaの古いVersionではそのRendering EngineはPrestoと呼ばれていた.
Opera12.16以前ではこれがtrueとなる.

目次に戻る

Snp_LtChrome14

以下のJavascriptコードを実行した結果である.
!!window.chrome && typeof window.chrome.webstore!='undefined'
Chromeであるか否かを示す定石コードである(ただしVersion14以降が対象である).
前半の!!window.chromeはChromium系か否かを判定する定石コードである.
後半のtypeof window.chrome.webstore!='undefined'は、OperaやEdgeの可能性を廃するために付加したものであろう.
Chrome Ver14以上のみtrueである.

目次に戻る

Snp_ChromiumInFutaba

以下のJavascriptコードを実行した結果である.
!!window.chrome && 'WebkitAppearance' in document.documentElement.style
このSnippetはふたばちゃんねるにおいて独自に設定されているものである.
(少なくとも他のサイトでは、私はこのようなコードを見たことがない)
実質 Chromium系であるか否かを示しているが、コードの後半が無意味である.

以下の環境においてtrue.
  • Chrome: 全Version
  • Opera: 14以上

解説

まずBrowser解析をされている方にとってはおなじみの以下のコードを掲載しておこう.
!window.chrome && 'WebkitAppearance' in document.documentElement.style
コード前半に!window.chromeと置くことで、Chromium系以外であることを前提とした上でコード後半部によりWebkitが使われているVersionのみを検出するというものである.
これは様々なサイトで広く見られる正しいコードであり、例えばSafariなどを検出できる.
この記事でもSnp_Webkitという項目として挙げておいた.

ところが、本項目のふたばちゃんねる独自のコードでは、前半部分が!!window.chromeとなっている.
これでは逆にChromium系であることを前提としてしまう.

これはどうしたことか…?
もしかするとChromium系かつWebkitが使われているVersionのみを検出しようと試みたのであろうか?

しかしながら、Browser解析をされている方なら普通はご存知だと思うが、 Chromium系では'WebkitAppearance' in document.documentElement.style でWebkit版であるか否かを判定することはできないのである.
(だからこそ、定石では先頭にまず!window.chromeという前提条件を置く)

なぜならばChromium系の場合、どのVersionでもこの'WebkitAppearance' というパターンを必ず含む.
たとえWebkitが使われていないVersionでもである.
つまりこのコードの && より後半は必ずtrueになるのであるから、明らかに無意味である.

検証

以下ではChromium系としてChromeまたは新しいVersionのOperaの例を挙げ、このことを検証してみよう.
この'WebkitAppearance'というパターンを調べるコードがtrueとなるのは、Chromeの場合は全Version、Operaの場合はVer14以上のときである.
ChromeはVer28以降Webkitは廃止されBlinkへと移行した.
Operaの場合も同様にVer15以降はBlinkとなっている.
つまりWebkitではないVersionでもこのコードはやはりtrueとなってしまうことがお分かりだろう.

目次に戻る

Snp_Touch

以下のJavascriptコードを実行した結果である.
typeof document.ontouchstart != 'undefined'
この環境のBrowserにおいてTouch Padが有効か否かを示す.

目次に戻る

Snp_FacileMobile

以下のJavascriptコードを実行した結果である.
typeof window.orientation != 'undefined'
Browserにおいてwindow.orientationが存在するか否かを示す.
window.orientationとは端末画面が縦長(portrait)と横長(landscape)のどちらであるかに関する情報である.
これはモバイル環境である否かの簡易判定に使うことができる.

目次に戻る

Snp_Webkit

以下のJavascriptコードを実行した結果である.
!window.chrome && 'WebkitAppearance' in document.documentElement.style
Webkit判定.
これはChromium系以外のWebkitが使われているBrowser、例えばSafariなどを検出する目的で一般によく使用されている定石的なコードである.

注意

ふたばの/bin/base4ajax.js内にこれとよく似た意味不明なテスト(上記のSnp_ChromiumInFutaba)が存在するが、その効果はこれとは全く異なる.

目次に戻る

This article was written by:
none image

K.Yakisoba.H

@znk project