【質問】マクロの呼び出し方法について

  1. こんにちは。

    どなたか教えてください。
    Meryのマクロ中で、Meryを”mf”付きで実行するのはイレギュラーなやり方なのでしょうか。
    evalで他のマクロを呼び出すと、ScriptNameの値が呼び出したマクロのものになってしまうのです
    一応、特定の変数の有無で呼び出されているか単独実行なのかを判断できるのですが……。

    よろしくお願いします。m(_ _ )m

     |  手石  |  返信
  2. ●手石さん

    > evalで他のマクロを呼び出すと、ScriptNameの値が呼び出したマクロのものになってしまうのです

    これは次のように eval 前に設定することで偽装が可能です

    // 呼び出す側
    (function(){
      var ScriptName = "呼び出される側のファイル名";
      eval(呼び出される側のコード);
    })();
    // 呼び出される側
    Alert(ScriptName);

    ポイントは ScriptName のアクセスに Window.ScriptName のようにオブジェクトから書かないこと.

    ということで恐らく問題は解決するので,以下は /mf に関する蛇足になります.
    マクロから /mf でマクロを呼び出すことは,私の確認する限りでは問題なく動作していますが恐らくイレギュラーな動作だと思います.
    /mf でマクロを起動した場合,新たにプロセスを作成してマクロを実行後,タブが有効な場合は多重起動判定で後から起動したプロセスが Kill されます.
    この実行されている間,実はマクロが複数プロセスで並列動作していることになります.
    後から起動したマクロも Document など普通にアクセスできますが,その操作が安全かについては保証されていないのではないでしょうか.
    新たにプロセスを起動する負荷もありますし,そうでなければいけない事情がない限りは避けた方が賢明だと思います.
    ただ私が公開しているマクロでは,一定時間毎にマクロを実行するトリックに使ったりしていますが……

     |  ks  |  返信
  3. ksさん

    なるほど!です。
    同一の変数名を使うとは、思いつきませんでした。
    併せて、/mfについてのモヤモヤもスッキリです。

    ありがとうございます。m(_ _)m

    P.S.
    Window.ScriptNameは、Meryのマクロ中では使えませんでした……。

     |  手石  |  返信
  4. ●手石さん

    > Window.ScriptNameは、Meryのマクロ中では使えませんでした……。

    失礼しました.正しくは「window.ScriptName」ですね.
    window だけは全て小文字でないとだめでした.

    書き忘れていましたが,var による偽装では大文字小文字が区別されるので注意が必要です.
    var ScriptName = "hoge.js"
    Alert(eval("scriptname"));
    と大文字小文字が異なる場合は,元々の window.ScriptName が呼ばれます.
    自分で作成したマクロを呼び出す場合は問題ないですが,そうでない場合必ずしも意図した通りに動かない可能性があります.

     |  ks  |  返信
  5. ksさん

    > window だけは全て小文字でないとだめでした.
    > 書き忘れていましたが,var による偽装では大文字小文字が区別されるので注意が必要です.

    れ、ホントだ。
    勉強になりました。ありがとうございます。

     |  手石  |  返信
スポンサーリンク