12行以上のスクリプト記述を可能にするプラグインMOT_ScriptCommandExtensionの不具合について

こんにちは、メルサイアと申します。
ツイッターでの質問を受けて、投稿しています。

翠さんが作成されたものを、私が許可を頂いてMITライセンスのプラグインとして公開した、
スクリプトで12行以上のスクリプト記述を可能にするプラグイン MOT_ScriptCommandExtension の使用で、
以下のような不具合が報告されています。

症状: thisに関する記述が処理される場合、2回目以降の呼び出し時にスクリプトの先頭1行を読み込まない

症状が起こるサンプルコードや詳細は、ツイッターのページを参照ください。
https://twitter.com/syokubutuennnn/status/1003968460039180288

私はなにぶん不勉強なもので、thisに対する挙動がちんぷんかんぷんで、自力での解決は難しいです。。。><
もし解決策がわかる方がおられましたら、ご助言いただけると幸いです。

なお、ソースコードは、以下でご自由にDLできます。編集いただいたものを添付いただけると、とても助かります。
https://tm.lucky-duet.com/viewtopic.php?t=2163

以上です、よろしくお願いいたします。
 

トリアコンタン

モデレーター
スタッフ
モデレーター
私はなにぶん不勉強なもので、thisに対する挙動がちんぷんかんぷんで、自力での解決は難しいです。。。><
もし解決策がわかる方がおられましたら、ご助言いただけると幸いです。

こんにちは!
本件ですが、結論から言いますとプラグインとは無関係の事象となります。

スクリプト中で「this._params[0] = 1」という記述がありますが、
この記述は本来のイベントコマンドのパラメータ(この場合はイベントコマンド「スクリプト」の1行目)を書き換えてしまいます。
よって2回目の実行から「console.log('1行目')」は「1」という値に書き換わってしまいます。

例えば、以下の内容でスクリプトを実行すると1回目の実行では何も起こりませんが2回目の実行でalertが表示されると思います。
PHP:
this._params[0] = 'alert(111)';

よって、配列の参照に関する仕様を熟知したうえで敢えて実行する場合を除いて、スクリプト中でthis._params[n]という記述は控えた方が無難です。
どうしても同じことをしたい場合は以下のようにパラメータ配列を一度に指定すれば再代入により配列自体の参照元が変わるのでOKです。
PHP:
this._params = ['alert(111)'];
 
>トリアコンタンさん
非常に速い返信、ありがとうございました。おかげで助かりました!
なるほど、「this._params[0] = 1」の「this._params[0]」が、
イベントコマンドのパラメータ(スクリプトの一行目)を指しているの話だったのですね…。
これには全く気づけませんでした…。ほんと、頭が下がります。

プラグインの不具合ではないということで、このスレッドは解決としたいと思います。
トリアコンタンさん、重ねて、ありがとうございました! お礼申し上げます。

ただ、ツイッターで言われたことが気になったので、
やはり、スクリプトの一行目にコメント文を書くことは、
エラーが出た時のスクリプトの場所特定や、スクリプトの保守性からも大切かと思い、
以下の更新をしました。
・2016/06/06 スクリプトの一行目にコメント文を書くことを推奨する旨を、ヘルプに記載(merusaia)

ここにも更新後の生ファイルを置いておくので、必要な方がいらっしゃいましたら、ダウンロードしてください。
 

Attachments

  • MOT_ScriptCommandExtension.js
    7 KB · 閲覧: 13
最後に編集:
トップ