コモノExtendScript100本ノック

超初心者のDTPオペレーターが週にひとつスクリプトを書くブログ

052.【Id】選択したテキストを右クリックメニューでGoogle検索する

Mac未対応
※ブラウザはChrome固定

書いたコード

//@targetengine 'searchByChrome'

var mn = app.menus.item("$ID/Main").submenus.item("Scripts");
mn.isValid && mn.remove();

var addCustomMenu = (function() {
    var customMenuAction = app.scriptMenuActions.add("Google検索");
    var customMenu = app.menus.item("$ID/Main").submenus.item("Scripts");
    var customMenuItem;
    if (!customMenu.isValid) {
        customMenu = app.menus.item("$ID/Main").submenus.add("Script");
        customMenuItem = customMenu.menuItems.item("Google検索");
    }
    // Google検索関数
    var fnc = function() {
        var sel = app.selection[0]
        if (app.selection.length !== 1) {
            alert("テキストを選択してください");
            exit();
        }
        if (app.selection[0].constructor.name !== "Text") {
            alert("テキストを選択してください");
            exit();
        }
        var sel = app.selection[0].contents;
        var url = "https://www.google.com/search?q=" + sel + "&rlz=1C1TWJA_jaJP732JP732&oq=" + sel + "&aqs=chrome..69i57j0l5.1527j0j8&sourceid=chrome&ie=UTF-8";
        var scpt = 'CreateObject("WScript.Shell").Run("chrome.exe -url ' + url + '")';
        app.doScript(scpt, ScriptLanguage.VISUAL_BASIC);
    }

    var ev = customMenuAction.eventListeners.add("onInvoke", fnc);
    if (!customMenuItem.isValid) {
        customMenu.menuItems.add(customMenuAction);
    }
    // コンテキストメニューに追加
    var contextMenu = app.menus.item("文字のコンテキストメニュー").menuItems.item("Google検索");
    contextMenu.isValid && contextMenu.remove();
    contextMenu = app.menus.item("文字のコンテキストメニュー").menuItems.add(customMenuItem.associatedMenuAction);
}());

メモ

わかったこと

  • ●●があったら/無かったら××
var pg = doc.pages.itemByName("100");
if (pg.isValid) {
    pg.remove();
}

pg.isValid && pg.remove(); 

と表せる。 同様に

if (!pg.isValid) {
    doc.pages.add();
    }

pg.isValid || doc.pages.add();

と表せる。

  • menu周りもろもろ
    あくまで私の調べた限りなので誤りを含む可能性が多分にあります。
    • menu:menuElementの束。メニューバーやコンテキストメニューなど。
      • menuElement:menuの中の一つ一つ(submenuやmenuSeparatorsも含む)。
      • menuItem:menuの中の一つ一つ(submenuやmenuSeparatorsを含まない)。
      • submenu:menuの中で子要素を持つ項目。
    • menuAction:menuItemに割り当てられる機能。挙動そのもの。
    • ScriptMenuAction:menuActionと同等だが指定のスクリプトを実行するもの。

積み残し

  • JavaScriptで完結したい。
  • ESTKで実装したい。
  • Google検索の言語設定を選択できるようにする?

参考