{"id":18340359,"url":"https://github.com/dimensiondev/pricedoge","last_synced_at":"2025-04-06T05:32:32.858Z","repository":{"id":38267320,"uuid":"174913176","full_name":"DimensionDev/PriceDoge","owner":"DimensionDev","description":"A Chrome extension for price comparison","archived":false,"fork":false,"pushed_at":"2023-01-03T17:39:28.000Z","size":5478,"stargazers_count":74,"open_issues_count":35,"forks_count":13,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-21T18:22:35.781Z","etag":null,"topics":["browser-extension","chrome-extension","e-commerce","p2p"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DimensionDev.png","metadata":{"files":{"readme":"README-zh_CN.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-03-11T02:42:46.000Z","updated_at":"2024-08-09T06:05:30.000Z","dependencies_parsed_at":"2023-02-01T08:16:42.615Z","dependency_job_id":null,"html_url":"https://github.com/DimensionDev/PriceDoge","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DimensionDev%2FPriceDoge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DimensionDev%2FPriceDoge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DimensionDev%2FPriceDoge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DimensionDev%2FPriceDoge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DimensionDev","download_url":"https://codeload.github.com/DimensionDev/PriceDoge/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247440733,"owners_count":20939223,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["browser-extension","chrome-extension","e-commerce","p2p"],"created_at":"2024-11-05T20:22:15.503Z","updated_at":"2025-04-06T05:32:31.606Z","avatar_url":"https://github.com/DimensionDev.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Pricedoge\n\n\u003cdiv style=\"float: right;\"\u003e\u003ca href=\"./README-zh_CN.md\"\u003eEnglish document\u003c/a\u003e\u003c/div\u003e\n\n一个比较商品价格的 Chrome 扩展\n\n## 原理\n\n当你访问一个网页时，这个扩展会检查它是不是商品详情页，然后从其他平台搜索相同商品的价格，结果会显示在当前网页的顶部。\n\n## 扩展\n\n你可以在 https://github.com/DimensionFoundation/PriceDoge/raw/master/extension/pricedog.crx 下载本扩展\n\n本扩展使用了 React 和 Typescript。\n你可以运行 `npm run build` 来编译本扩展，然后在 Chrome 的扩展管理中`加载已解压的扩展`。\n我们不想使用 `npm run eject`，这样会从 react-scripts 里 eject 出一堆不需要的东西，所以我们使用 `rewire` 来修改 webpack 配置。\n你可以看看 [./extension/scripts/build.js](./extension/scripts/build.js) 和 [./extension/config/webpack.prod.js](./extension/config/webpack.prod.js)。\n\n### 密钥对\n\n当你打开扩展页时，本扩展会使用 bip39 生成一对密钥对，详情请见 [./extension/src/utils/keyStore.ts](./extension/src/utils/keyStore.ts)。\n\n### Content script\n\n所有的 Content script 都在 [./extension/src/contentHandler](./extension/src/contentHandler) 目录下。\n每个脚本都继承了 `IContentHandler`。\n`canHandle()` 会在每次访问页面时被调用。如果 `canHandle()` 返回了 `true`，`handle()` 会被调用。\n\n### Background script\n\n所有的 Background script 都在 [./extension/src/backgroundService](./extension/src/backgroundService) 目录下。\n\n### Background script、Content script 与网页之间的通信\n\n在不同的上下文之间通信很重要，因为相同的代码会在不同的上下文里执行。\n详情见 [./extension/src/utils/messaging.ts](./extension/src/utils/messaging.ts)。  \n为了避免每次都检查当前上下文，我们有一个 `MessageCenter` 来处理这些事情。\n用 `Message.send()` 发送消息，用 `Message.on()` 订阅。\n\n所有的消息都是有类型的。见类型 `ITypedMessages`。\n\n### 商品结果提供商\n\n-   [亚马逊](https://amazon.com)\n-   [京东](https://jd.com)\n-   [Newegg](https://newegg.com)\n-   [淘宝](https://taobao.com)\n\n详情见 [./extension/src/services](./extension/src/services)。\n淘宝的搜索请求需要额外的服务器辅助。见 [服务器](#服务器) 一节。\n\n### 本地化\n\n本地化文本储存在 [./extension/src/i18n`中，以`en](./extension/src/i18n`中，以`en) 为基准。\n使用以下脚本检查本地化是否完整。\n\n\u003e `cd extension`\n\n\u003e `npm run i18n-lint`\n\n## 服务器\n\n服务器使用了 Typescript + Koa。\n`puppeteer` 用来完成搜索请求。详情见 [./server/src/taobao.ts](./server/src/taobao.ts)。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdimensiondev%2Fpricedoge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdimensiondev%2Fpricedoge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdimensiondev%2Fpricedoge/lists"}