概要
内蔵ブラウザエンジン(Webkit/Classic)でサポートしていないJavaScriptについて解説します。
Webkitエンジンは、ECMAScript 5をサポートしていますが、ECMAScript 6(2015)で追加された機能はサポートしておりません。※ ECMAScript = JavaScriptの仕様
ただし、Ver.10.4で追加された「ポリフィル(Polyfill)」機能により、ECMAScript 6で追加された機能の一部が実行可能になりました。
以下では、ECMAScript 6で追加された機能の対応可否について解説します。
なお、Classic エンジンに関してはECMAScript 5、ECMAScript 6 ともにサポートしていません。
具体例
ECMAScript 6で追加された記法の対応可否
BizRobo! Basicの全てのバージョンでECMAScript 6で追加された記法(アロー関数、テンプレートリテラル、let等)をサポートしておりません。
この記法で書かれているWebサイト操作時、browser TracerのJavaScriptタブに以下のようなエラーメッセージが表示されることがあります。
"Illegal token"
"Unexpected identifier"
上記のエラーメッセージが出力されている場合、ECMAScript 6で追加された記法が使用されている可能性がございます。使用されている場合は、以下回避策を実施下さい。
【回避策】
・JavaScript Executionタブ > JavaScript Changes > Replace Textで、旧記法に変換する外部サービス(babel等)が利用できるようWebサイトのフォームを置き換える
※Replace Textでフォームの置き換えを行うことで、DS内では置き換え後のフォームが解析されます。
そのため、旧記法に変換する外部サービスを利用できる記載に置き換えをすると、ECMAScript 6の記述を旧記法に変換した状態で表示することが可能となる場合があります。
また、外部サービスの利用方法に関しましてはサポートできかねますため、お客様判断にて実施をお願いいたします。
・JavaScript Executionタブ > JavaScript Changes > Replace Textで、ECMAScript 6の記述を置換する
※コードの編集は非常に複雑なので、推奨しません。
<例> letが使われている場合
JavaScript Executionタブ > JavaScript Changes > Replace Textで、"let"を "var"に置き換える。
(単語"let"が全て置き換わってしまうので、"let (半角スぺース)"で置換します。)
・Chromiumを使用する
・Device Automation(Desktop Automation)を使用する
ECMAScript 6で追加されたオブジェクト、APIの対応可否
BizRobo! Basicのバージョンによってサポート範囲が異なります。
▲Ver.10.3以前のバージョン
10.4以前のバージョンでは、ECMAScript 6で追加された全てのオブジェクト、APIをサポートしておりません。
ECMAScript 6で追加されたオブジェクトを使用しているWebサイト操作時、browser TracerのJavaScriptタブに以下のようなエラーメッセージが表示されることがあります。
"〇〇 is not defined"
上記のエラーメッセージが出力されている場合、ECMAScript 6以降で追加されたオブジェクト、APIが使用されている可能性がございます。
使用されている場合は、以下回避策を実施下さい。
【回避策】
・JavaScript Changesで代替となるJavaScriptを書く
<参考ナレッジ>
Design StudioでWebページが表示されず、Browser Tracer のJavaScript欄に “Map is not defined” の例外が出力している。
・Chromiumを使用する
・Device Automation(Desktop Automation)を使用する
▲Ver.10.4以降のバージョン
Ver.10.4で追加されたポリフィル機能により、以下のJavaScriptオブジェクト、APIを実行することができます。
ポリフィル機能でサポートされていないオブジェクト、APIを使用している場合は、下記の回避策を実施してください。
【回避策】
・Chromiumを使用する
・Device Automation(Desktop Automation)を使用する
・「JavaScript 変更」または「JavaScript ポリフィル」のカスタム機能で代替コードを書く
※JavaScriptの代替コードの使用・記載内容についてはサポート対象外です。
お客様判断にて実施をお願いします。
<Pollyfill機能でサポートされているオブジェクト、API一覧>
オブジェクトまたは API |
注意 |
---|---|
Array.prototype.values Array.prototype.keys Array.prototype.includes Array.prototype.findIndex Array.prototype.find Array.prototype.fill Array.prototype.entries Array.prototype.copyWithin Array.prototype.contains Array.prototype.@@iterator Array.of Array.from |
|
Element.prototype.replaceWith Element.prototype.prepend Element.prototype.matches Element.prototype.closest Element.prototype.before Element.prototype.append Element.prototype.after |
|
DOMTokenList.prototype.@@iterator |
|
IntersectionObserverEntry IntersectionObserver |
|
Intl |
オブジェクトの全セットおよび次の言語をサポートします。 da, de , en, ja, ru |
Map |
オブジェクトの全セットをサポートします。 |
Math.trunc Math.tanh Math.sinh Math.sign Math.log2 Math.log1p Math.log10 Math.imul Math.hypot Math.fround Math.cosh Math.clz32 Math.cbrt Math.atanh Math.asinh Math.acosh |
|
NodeList.prototype.forEach NodeList.prototype.@@iterator |
|
Number.parseInt Number.parseFloat Number.isSafeInteger Number.isInteger Number.MIN_SAFE_INTEGER Number.MAX_SAFE_INTEGER Number.Epsilon |
|
Object.values Object.setPrototypeOf Object.keys Object.entries Object.assign |
|
Promise Promise.prototype.finally |
|
RegExp.prototype.flags |
|
Set |
オブジェクトの全セットをサポートします。 |
String.prototype.contains String.prototype.codePointAt String.prototype.endsWith String.prototype.@@iterator String.prototype.includes String.prototype.padEnd String.prototype.padStart String.prototype.repeat String.prototype.startsWith String.prototype.trim |
|
Symbol Symbol.hasInstance Symbol.isConcatSpreadable Symbol.iterator Symbol.match Symbol.search Symbol.species Symbol.split Symbol.toPrimitive Symbol.toStringTag Symbol.unscopables |
|
Url |
オブジェクトの全セットをサポートします。 |
WeakSet WeakMap |
|
区分 | 確認Ver |
仕様 | 10.4.0.1 |