Skip to content

グローバル名前空間の汚染 #2

@YukiWorks432

Description

@YukiWorks432

trimという関数がどうやらグローバル名前空間を破壊しているっぽい。
AeのMotion Tools Proという外部拡張機能が、trimという関数をグローバルに定義するようなのだが、このリポジトリで作成されたスクリプトの実行後、グローバルのtrimundefinedになるみたい。
es5-shimdefinePropertiesの実装が怪しいっぽく、この部分でどうやらスコープが不明なtrimという関数が定義されてしまってるっぽい(ほかの箇所からtrimにアクセスするようなコードも見られる)。

  defineProperties(
    StringPrototype,
    {
      // https://blog.stevenlevithan.com/archives/faster-trim-javascript
      // http://perfectionkills.com/whitespace-deviations/
      trim: function trim() {
        "use strict";

        if (typeof this === "undefined" || this === null) {
          throw new TypeError("can't convert " + this + " to object");
        }
        return $String(this)
          .replace(trimBeginRegexp, "")
          .replace(trimEndRegexp, "");
      },
    },
    hasTrimWhitespaceBug
  );

対策として、この真下(2006行目)にtrimを宣言するコードを挿入することで、terserの結果なのか、グローバルのtrimを破壊しないようになった。

var trim = call.bind(StringPrototype.trim);

ほかの関数群でも確かめる必要がある。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions