5

Chromeのブックマークファイルに新しいブックマークエントリを追加するにはどうすればよいですか?. 私の要件は、アプリケーションを介してブックマーク エントリを追加する必要があるということです。チェックサム (MD5) を作成するロジックを指定してください。

4

5 に答える 5

6

それを行うことの安全性/ハック性に関係なく、方法は次のとおりです。

  1. Chrome が閉じていることを確認します。
  2. 削除 (または名前変更)Bookmarks.bak
  3. からチェックサム エントリを完全に削除します。Bookmarks
  4. BookmarksJSON を心ゆくまで編集する
  5. Chrome を再度開く

バックアップもチェックサムもない場合、Chrome は新しい JSON を使用して新しいチェックサムを生成します。

これをよりシームレスに/あまり積極的に行いたくない場合は、元のソース コードでチェックサムを生成する方法を調べて、同じアルゴリズムを実装することができます (こちらの 57 行を参照)。

もちろん、Google は互換性を損なう可能性のあるものを変更できることに注意してください。ただし、これは機能します。私が作成した Java アプリで実行しただけです。

于 2012-10-17T22:29:36.730 に答える
3

私のアドバイス:しないでください。これはハックのような動作です。Chrome の「API」にはブックマーク ファイルが含まれておらず、警告なしに変更される可能性があります。Chrome の実行中にファイルを変更するとどうなるかはわかりません。Chrome は、書き込む前に毎回そのファイルを読み取りますか? それとも、起動時に一度だけ読み取られますか? プロファイルとブックマークの同期についてはどうですか?

Chrome の拡張 API でブックマーク オブジェクトを使用することをお勧めします。

于 2012-07-03T12:06:47.517 に答える
0

C# ソリューションは次のとおりです。

public static string CalculateCheckSum(string bookmarksText)
{
    var bytes = new List<byte>();

    void DigestUrl(JToken url)
    {
        bytes.AddRange(Encoding.ASCII.GetBytes(url["id"].Value<string>()!));
        bytes.AddRange(Encoding.Unicode.GetBytes(url["name"].Value<string>()!));
        bytes.AddRange(Encoding.ASCII.GetBytes("url"));
        bytes.AddRange(Encoding.ASCII.GetBytes(url["url"].Value<string>()!));
    }

    void DigestFolder(JToken folder)
    {
        bytes.AddRange(Encoding.ASCII.GetBytes(folder["id"].Value<string>()!));
        bytes.AddRange(Encoding.Unicode.GetBytes(folder["name"].Value<string>()!));
        bytes.AddRange(Encoding.ASCII.GetBytes("folder"));

        foreach (var item in folder["children"])
        {
            if (item?["type"]?.Value<string>() == "folder")
            {
                DigestFolder(item);
            }
            else
            {
                DigestUrl(item);
            }
        }
    }

    var json = JToken.Parse(bookmarksText);

    DigestFolder(json["roots"]?["bookmark_bar"]);
    DigestFolder(json["roots"]?["other"]);
    DigestFolder(json["roots"]?["synced"]);

    using var md5 = new MD5CryptoServiceProvider();

    var result = md5.ComputeHash(bytes.ToArray());

    return BitConverter.ToString(result).Replace("-", "").ToLower();
}

最初にFile.ReadAllTextメソッドを使用してファイルからすべてのテキストを読み取りbookmarks、次にこのメソッドを呼び出します。

于 2021-06-12T01:51:24.983 に答える