「お気に入りの追加」「お気に入りの整理」ダイアログを表示させる

通常、IEでは、


external.AddFavorite(document.URL, document.title);

を実行することで、「お気に入りの追加」のダイアログを表示させることができます。
しかし、「external.AddFavorite」はIEの機能であって、IEコンポーネントの機能ではないので、IEコンポーネント上で「external.AddFavorite」を実行すると未実装エラーとなります。

しかし、これは、次のコードで代用できます。


var shellUIHelper = new ActiveXObject("Shell.UIHelper");
shellUIHelper.AddFavorite(document.URL, document.title);

このコードと下記execute()メソッドを用いて、簡易な「お気に入りの追加」「お気に入りの整理」表示メソッドをCBrowserへ実装しました。

// お気に入りの整理
void organizeFavorites()
{
    const char[] script =   `var shellUIHelper = new ActiveXObject("Shell.UIHelper");`
                            `shellUIHelper.showBrowserUI("OrganizeFavorites", null);`;
    
    execute(script);
}

// お気に入りの追加 (現在のページ)
void addFavorite()
{
    const char[] script =   `var shellUIHelper = new ActiveXObject("Shell.UIHelper");`
                            `shellUIHelper.AddFavorite(document.URL, document.title);`;
    
    execute(script);
}

// お気に入りの追加
void addFavorite(char[] url, char[] title)
{
    const char[] fmt =      `var shellUIHelper = new ActiveXObject("Shell.UIHelper");`
                            `shellUIHelper.AddFavorite('%s','%s');`;
    
    execute(std.string.format(fmt, escapeString(url), escapeString(title)));
}

// escape
static char[] escapeString(char[] unescaped_string)
{
    return std.string.replace(unescaped_string, "'", "\\'");
}

かっこうはよくないですが、実装は楽です。

  • 余談

「お気に入りの追加」が違和感あります。
「(このページを)お気に入り(フォルダ)へ追加」ではないかなと思いました。
「お気に入り(のページ)の追加」? その場合「お気に入り(のページ)を追加」の気が。
日本語難しいです。