diff --git a/README.md b/README.md index e755e3993..bb638231c 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,17 @@ -# Wappalyzer [![Travis](https://travis-ci.org/aliasio/wappalyzer.svg?branch=master)](https://travis-ci.org/aliasio/wappalyzer/) +[![Travis](https://travis-ci.org/aliasio/wappalyzer.svg?branch=master)](https://travis-ci.org/aliasio/wappalyzer/) +[![wappalyzer NPM](https://img.shields.io/badge/npm-wappalyzer-blue)](https://www.npmjs.com/package/wappalyzer) +[![wappalyzer-core NPM](https://img.shields.io/badge/npm-wappalyzer--core-blue)](https://www.npmjs.com/package/wappalyzer-core) +[![Github Sponsor](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&link=https://github.com/sponsors/AliasIO)](https://github.com/sponsors/AliasIO) + +Wappalyzer -[Wappalyzer](https://www.wappalyzer.com) identifies technologies on websites, including content management systems, ecommerce platforms, JavaScript frameworks, analytics tools and [much more](https://www.wappalyzer.com/technologies). +# Wappalyzer -* [wappalyzer on NPM](https://www.npmjs.com/package/wappalyzer) -* [wappalyzer-core on NPM](https://www.npmjs.com/package/wappalyzer-core) -* [Chrome extension](https://chrome.google.com/webstore/detail/wappalyzer/gppongmhjkpfnbhagpmjfkannfbllamg) -* [Firefox add-on](https://addons.mozilla.org/en-US/firefox/addon/wappalyzer/) -* [Edge extension](https://microsoftedge.microsoft.com/addons/detail/mnbndgmknlpdjdnjfmfcdjoegcckoikn) -* [Safari extension](https://apps.apple.com/app/wappalyzer/id1520333300) -* [All apps and integrations](https://www.wappalyzer.com/api/download) -* [Wappalyzer REST APIs](https://www.wappalyzer.com/api/) +
+ +**[Wappalyzer](https://www.wappalyzer.com) identifies technologies on websites, such as CMS, web frameworks, ecommerce platforms, JavaScript libraries, analytics tools and [more](https://www.wappalyzer.com/technologies).** + +If you don't have time to configure, host, debug and maintain your own infrastructure to analyse websites at scale, we offer a SaaS solution that has all the same capabilities and a lot more. Our [apps](https://www.wappalyzer.com/apps/) and [APIs](https://www.wappalyzer.com/api/) not only reveal the technology stack a website uses but also company and contact details, social media profiles, keywords and metadata. ## Prerequisites @@ -92,6 +94,7 @@ Patterns (regular expressions) are kept in [`src/technologies.json`](https://git "css": "\\.example-class", "robots": "Disallow: /unique-path/", "implies": "PHP\\;confidence:50", + "requires": "WordPress", "meta": { "generator": "(?:Example|Another Example)" }, @@ -224,8 +227,7 @@ Plus any of: -### Implies and excludes (optional) - +### Implies, requires and excludes (optional) @@ -246,6 +248,14 @@ Plus any of: + + + + + + @@ -395,7 +405,6 @@ Patterns are essentially JavaScript regular expressions written as strings, but Tags (a non-standard syntax) can be appended to patterns (and implies and excludes, separated by `\\;`) to store additional information. -
"PHP"
requiresString | Array + Similar to implies but detection only runs if the required technology has been identified. Useful for themes for a specific CMS. + "WordPres"
excludes String | Array
@@ -433,7 +442,6 @@ Tags (a non-standard syntax) can be appended to patterns (and implies and exclud Application version information can be obtained from a pattern using a capture group. A condition can be evaluated using the ternary operator (`?:`). -
diff --git a/src/drivers/npm/driver.js b/src/drivers/npm/driver.js index dd5933ac8..35ec8a2a8 100644 --- a/src/drivers/npm/driver.js +++ b/src/drivers/npm/driver.js @@ -348,7 +348,7 @@ class Driver { log(message, source = 'driver') { if (this.options.debug) { // eslint-disable-next-line no-console - console.log(`wappalyzer | log | ${source} |`, message) + console.log(`log | ${source} |`, message) } } } @@ -393,7 +393,7 @@ class Site { log(message, source = 'driver', type = 'log') { if (this.options.debug) { // eslint-disable-next-line no-console - console[type](`wappalyzer | ${type} | ${source} |`, message) + console[type](`${type} | ${source} |`, message) } this.emit(type, { message, source }) @@ -422,7 +422,7 @@ class Site { promiseTimeout( promise, fallback, - errorMessage = 'The website took too long to respond' + errorMessage = 'Operation took too long to respond' ) { let timeout = null @@ -435,7 +435,11 @@ class Site { timeout = setTimeout(() => { clearTimeout(timeout) - fallback ? resolve(fallback) : reject(new Error(errorMessage)) + const error = new Error(errorMessage) + + error.code = 'PROMISE_TIMEOUT_ERROR' + + fallback !== undefined ? resolve(fallback) : reject(error) }, this.options.maxWait) }), promise.then((value) => { @@ -573,7 +577,9 @@ class Site { try { await this.promiseTimeout( - page.goto(url.href, { waitUntil: 'domcontentloaded' }) + page.goto(url.href, { waitUntil: 'domcontentloaded' }), + undefined, + 'Timeout (navigation)' ) await sleep(1000) @@ -596,10 +602,12 @@ class Site { }) ) ), - { jsonValue: () => [] } + { jsonValue: () => [] }, + 'Timeout (links)' ) ).jsonValue(), - [] + [], + 'Timeout (links)' ) // CSS @@ -629,10 +637,12 @@ class Site { return css.join('\n') }, this.options.htmlMaxRows), - { jsonValue: () => '' } + { jsonValue: () => '' }, + 'Timeout (css)' ) ).jsonValue(), - '' + '', + 'Timeout (css)' ) // Script tags @@ -644,10 +654,12 @@ class Site { .map(({ src }) => src) .filter((src) => src) ), - { jsonValue: () => [] } + { jsonValue: () => [] }, + 'Timeout (scripts)' ) ).jsonValue(), - [] + [], + 'Timeout (scripts)' ) // Meta tags @@ -669,17 +681,19 @@ class Site { {} ) ), - { jsonValue: () => [] } + { jsonValue: () => [] }, + 'Timeout (meta)' ) ).jsonValue(), - [] + [], + 'Timeout (meta)' ) // JavaScript - const js = await this.promiseTimeout(getJs(page), []) + const js = await this.promiseTimeout(getJs(page), [], 'Timeout (js)') // DOM - const dom = await this.promiseTimeout(getDom(page), []) + const dom = await this.promiseTimeout(getDom(page), [], 'Timeout (dom)') // Cookies const cookies = (await page.cookies()).reduce( @@ -728,7 +742,8 @@ class Site { return [] }), - [] + [], + 'Timeout (dns)' ) } @@ -771,9 +786,9 @@ class Site { ) { await page.close() - this.log('Page closed') + this.log(`Page closed (${url})`) - throw new Error('No response from server') + throw new Error(`No response from server`) } this.cache[url.href] = { @@ -838,12 +853,37 @@ class Site { return reducedLinks } catch (error) { - if (error.constructor.name === 'TimeoutError') { - throw new Error('The website took too long to respond') + let hostname = url + + try { + ;({ hostname } = new URL(url)) + } catch (error) { + // Continue + } + + if ( + error.constructor.name === 'TimeoutError' || + error.code === 'PROMISE_TIMEOUT_ERROR' + ) { + const newError = new Error( + `The website took too long to respond: ${ + error.message || error + } at ${hostname}` + ) + + newError.code = 'WAPPALYZER_TIMEOUT_ERROR' + + throw newError } if (error.message.includes('net::ERR_NAME_NOT_RESOLVED')) { - throw new Error('Hostname could not be resolved') + const newError = new Error( + `Hostname could not be resolved at ${hostname}` + ) + + newError.code = 'WAPPALYZER_DNS_ERROR' + + throw newError } throw error @@ -982,10 +1022,15 @@ class Site { const { page, cookies, html, css, scripts, meta } = this.cache[url.href] - const js = await this.promiseTimeout(getJs(page, technologies), []) + const js = await this.promiseTimeout( + getJs(page, technologies), + [], + 'Timeout (js)' + ) const dom = await this.promiseTimeout( getDom(page, technologies), - [] + [], + 'Timeout (dom)' ) await this.onDetect( diff --git a/src/drivers/npm/package.json b/src/drivers/npm/package.json index 717d15d6d..bd93a1197 100644 --- a/src/drivers/npm/package.json +++ b/src/drivers/npm/package.json @@ -13,7 +13,7 @@ "software" ], "homepage": "https://www.wappalyzer.com/", - "version": "6.7.6", + "version": "6.7.9", "author": "Wappalyzer", "license": "MIT", "repository": { diff --git a/src/drivers/webextension/_locales/ca/messages.json b/src/drivers/webextension/_locales/ca/messages.json index cd9a29824..4abf3f187 100644 --- a/src/drivers/webextension/_locales/ca/messages.json +++ b/src/drivers/webextension/_locales/ca/messages.json @@ -86,6 +86,9 @@ "attributeCompanyType": { "message": "Company type" }, "attributeCompanyFounded": { "message": "Company founded" }, "attributeKeywords": { "message": "Keywords" }, + "attributeDns_spf": { "message": "SPF record" }, + "attributeDns_dmarc": { "message": "DMARC record" }, + "attributeSchemaOrgTypes": { "message": "schema.org types" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "Taulers de missatgeria" }, diff --git a/src/drivers/webextension/_locales/de/messages.json b/src/drivers/webextension/_locales/de/messages.json index 5cf57f269..6fa57f57e 100644 --- a/src/drivers/webextension/_locales/de/messages.json +++ b/src/drivers/webextension/_locales/de/messages.json @@ -86,6 +86,9 @@ "attributeCompanyType": { "message": "Company type" }, "attributeCompanyFounded": { "message": "Company founded" }, "attributeKeywords": { "message": "Keywords" }, + "attributeDns_spf": { "message": "SPF record" }, + "attributeDns_dmarc": { "message": "DMARC record" }, + "attributeSchemaOrgTypes": { "message": "schema.org types" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "Nachrichten Board" }, diff --git a/src/drivers/webextension/_locales/el/messages.json b/src/drivers/webextension/_locales/el/messages.json index 65beb7af2..d081e7248 100644 --- a/src/drivers/webextension/_locales/el/messages.json +++ b/src/drivers/webextension/_locales/el/messages.json @@ -86,6 +86,9 @@ "attributeCompanyType": { "message": "Company type" }, "attributeCompanyFounded": { "message": "Company founded" }, "attributeKeywords": { "message": "Keywords" }, + "attributeDns_spf": { "message": "SPF record" }, + "attributeDns_dmarc": { "message": "DMARC record" }, + "attributeSchemaOrgTypes": { "message": "schema.org types" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "Διαδικτυακό Φόρουμ" }, diff --git a/src/drivers/webextension/_locales/en/messages.json b/src/drivers/webextension/_locales/en/messages.json index 8da563f58..59f58dfa2 100644 --- a/src/drivers/webextension/_locales/en/messages.json +++ b/src/drivers/webextension/_locales/en/messages.json @@ -86,6 +86,9 @@ "attributeCompanyType": { "message": "Company type" }, "attributeCompanyFounded": { "message": "Company founded" }, "attributeKeywords": { "message": "Keywords" }, + "attributeDns_spf": { "message": "SPF record" }, + "attributeDns_dmarc": { "message": "DMARC record" }, + "attributeSchemaOrgTypes": { "message": "schema.org types" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "Message boards" }, diff --git a/src/drivers/webextension/_locales/es/messages.json b/src/drivers/webextension/_locales/es/messages.json index 50846f876..8f26d5757 100644 --- a/src/drivers/webextension/_locales/es/messages.json +++ b/src/drivers/webextension/_locales/es/messages.json @@ -86,6 +86,9 @@ "attributeCompanyType": { "message": "Company type" }, "attributeCompanyFounded": { "message": "Company founded" }, "attributeKeywords": { "message": "Keywords" }, + "attributeDns_spf": { "message": "SPF record" }, + "attributeDns_dmarc": { "message": "DMARC record" }, + "attributeSchemaOrgTypes": { "message": "schema.org types" }, "categoryName1": { "message": "Gestor de Contenido" }, "categoryName2": { "message": "Foro" }, diff --git a/src/drivers/webextension/_locales/fa/messages.json b/src/drivers/webextension/_locales/fa/messages.json index 134357541..05ddfa5c8 100644 --- a/src/drivers/webextension/_locales/fa/messages.json +++ b/src/drivers/webextension/_locales/fa/messages.json @@ -86,6 +86,9 @@ "attributeCompanyType": { "message": "Company type" }, "attributeCompanyFounded": { "message": "Company founded" }, "attributeKeywords": { "message": "Keywords" }, + "attributeDns_spf": { "message": "SPF record" }, + "attributeDns_dmarc": { "message": "DMARC record" }, + "attributeSchemaOrgTypes": { "message": "schema.org types" }, "categoryName1": { "message": "سیستم مدیریت محتوا" }, "categoryName2": { "message": "انجمن پیام" }, diff --git a/src/drivers/webextension/_locales/fr/messages.json b/src/drivers/webextension/_locales/fr/messages.json index f215c1697..3c3674338 100644 --- a/src/drivers/webextension/_locales/fr/messages.json +++ b/src/drivers/webextension/_locales/fr/messages.json @@ -86,6 +86,9 @@ "attributeCompanyType": { "message": "Company type" }, "attributeCompanyFounded": { "message": "Company founded" }, "attributeKeywords": { "message": "Keywords" }, + "attributeDns_spf": { "message": "SPF record" }, + "attributeDns_dmarc": { "message": "DMARC record" }, + "attributeSchemaOrgTypes": { "message": "schema.org types" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "Forum" }, diff --git a/src/drivers/webextension/_locales/gl_ES/messages.json b/src/drivers/webextension/_locales/gl_ES/messages.json index 7db65e573..578a6b1d6 100644 --- a/src/drivers/webextension/_locales/gl_ES/messages.json +++ b/src/drivers/webextension/_locales/gl_ES/messages.json @@ -86,6 +86,9 @@ "attributeCompanyType": { "message": "Company type" }, "attributeCompanyFounded": { "message": "Company founded" }, "attributeKeywords": { "message": "Keywords" }, + "attributeDns_spf": { "message": "SPF record" }, + "attributeDns_dmarc": { "message": "DMARC record" }, + "attributeSchemaOrgTypes": { "message": "schema.org types" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "Taboleiro de mensaxes" }, diff --git a/src/drivers/webextension/_locales/gr/messages.json b/src/drivers/webextension/_locales/gr/messages.json index 2e75b9257..6d1f5ba95 100644 --- a/src/drivers/webextension/_locales/gr/messages.json +++ b/src/drivers/webextension/_locales/gr/messages.json @@ -86,6 +86,9 @@ "attributeCompanyType": { "message": "Company type" }, "attributeCompanyFounded": { "message": "Company founded" }, "attributeKeywords": { "message": "Keywords" }, + "attributeDns_spf": { "message": "SPF record" }, + "attributeDns_dmarc": { "message": "DMARC record" }, + "attributeSchemaOrgTypes": { "message": "schema.org types" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "Διαδικτυακό Φόρουμ" }, diff --git a/src/drivers/webextension/_locales/id/messages.json b/src/drivers/webextension/_locales/id/messages.json index 2451ec79e..e5c8301fa 100644 --- a/src/drivers/webextension/_locales/id/messages.json +++ b/src/drivers/webextension/_locales/id/messages.json @@ -86,6 +86,9 @@ "attributeCompanyType": { "message": "Company type" }, "attributeCompanyFounded": { "message": "Company founded" }, "attributeKeywords": { "message": "Keywords" }, + "attributeDns_spf": { "message": "SPF record" }, + "attributeDns_dmarc": { "message": "DMARC record" }, + "attributeSchemaOrgTypes": { "message": "schema.org types" }, "categoryName1": { "message": "Sistem Pengelola Konten" }, "categoryName2": { "message": "Papan Pesan" }, diff --git a/src/drivers/webextension/_locales/it/messages.json b/src/drivers/webextension/_locales/it/messages.json index 6e5178d06..f42d0d0fe 100644 --- a/src/drivers/webextension/_locales/it/messages.json +++ b/src/drivers/webextension/_locales/it/messages.json @@ -86,6 +86,9 @@ "attributeCompanyType": { "message": "Company type" }, "attributeCompanyFounded": { "message": "Company founded" }, "attributeKeywords": { "message": "Keywords" }, + "attributeDns_spf": { "message": "SPF record" }, + "attributeDns_dmarc": { "message": "DMARC record" }, + "attributeSchemaOrgTypes": { "message": "schema.org types" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "Forum" }, diff --git a/src/drivers/webextension/_locales/ja/messages.json b/src/drivers/webextension/_locales/ja/messages.json index 14b310c24..e4da2a79c 100644 --- a/src/drivers/webextension/_locales/ja/messages.json +++ b/src/drivers/webextension/_locales/ja/messages.json @@ -86,6 +86,9 @@ "attributeCompanyType": { "message": "会社種別" }, "attributeCompanyFounded": { "message": "会社創立日" }, "attributeKeywords": { "message": "キーワード" }, + "attributeDns_spf": { "message": "SPF record" }, + "attributeDns_dmarc": { "message": "DMARC record" }, + "attributeSchemaOrgTypes": { "message": "schema.org types" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "メッセージボード" }, diff --git a/src/drivers/webextension/_locales/ko/messages.json b/src/drivers/webextension/_locales/ko/messages.json index 85bbadb5b..df970e38e 100644 --- a/src/drivers/webextension/_locales/ko/messages.json +++ b/src/drivers/webextension/_locales/ko/messages.json @@ -10,82 +10,85 @@ "optionTracking": { "message": "익명으로 wappalyzer.com에 식별된 기술 정보 전송" }, "optionThemeMode": { "message": "다크 모드 호환 활성화" }, "optionBadge": { "message": "아이콘에 식별된 기술 갯수 표시" }, - "optionShowCached": { "message": "Include cached detections in results" }, - "optionApiKey": { "message": "API key" }, - "optionApiKeyDescription": { "message": "get your API key" }, + "optionShowCached": { "message": "결과에 캐시된 식별 정보 포함" }, + "optionApiKey": { "message": "API 키" }, + "optionApiKeyDescription": { "message": "API 키 얻기" }, "disableOnDomain": { "message": "이 웹 사이트에서 끄기" }, "clearCache": { "message": "캐시된 식별 정보 지우기" }, "nothingToDo": { "message": "여기에는 할 일이 없네요." }, "noAppsDetected": { "message": "식별된 기술이 없습니다." }, "categoryPin": { "message": "항상 아이콘 보이기" }, - "termsAccept": { "message": "I'm ok with that" }, - "termsDecline": { "message": "Disable" }, + "termsAccept": { "message": "동의합니다" }, + "termsDecline": { "message": "비활성화" }, "termsContent": { "message": "이 확장 기능은 사이트의 도메인과 식별된 기술을 포함한 익명 정보를 wappalyzer.com에 전송합니다. 이 기능은 설정에서 비활성화 할 수 있습니다." }, "privacyPolicy": { "message": "개인정보처리방침" }, "createAlert": { "message": "이 웹 사이트에 대한 알림 받기" }, - "leadLists": { "message": "Lead generation tools" }, - "tabTechnologies": { "message": "Technologies" }, - "tabPro": { "message": "More info" }, - "creditBalance": { "message": "Credit balance:" }, - "proMessageHeading": { "message": "Unlock PRO features" }, - "proMessage": { "message": "Subscribe to a PRO plan to view company and contact information of the websites you visit." }, - "proButton": { "message": "Compare plans" }, - "proInfo": { "message": "Learn more" }, - "proEmpty": { "message": "No results found." }, - "proCrawl": { "message": "No results found, please check back later." }, - "formSave": { "message": "Save" }, + "leadLists": { "message": "잠재 고객 발굴 툴" }, + "tabTechnologies": { "message": "기술" }, + "tabPro": { "message": "더 보기" }, + "creditBalance": { "message": "소유 크레딧:" }, + "proMessageHeading": { "message": "PRO 기능 해제하기" }, + "proMessage": { "message": "PRO 플랜에 가입하면 방문하는 웹 사이트의 회사 및 연락처 정보를 볼 수 있습니다." }, + "proButton": { "message": "플랜 비교하기" }, + "proInfo": { "message": "더 알아보기" }, + "proEmpty": { "message": "결과가 없습니다." }, + "proCrawl": { "message": "결과가 없습니다, 잠시 후에 확인해주세요." }, + "formSave": { "message": "저장" }, - "setCompany": { "message": "Company information" }, - "setKeywords": { "message": "Keywords" }, - "setEmail": { "message": "Email addresses" }, - "setPhone": { "message": "Phone numbers" }, - "setAddress": { "message": "Addresses" }, - "setContact": { "message": "Contact details" }, - "setSocial": { "message": "Social media accounts" }, - "setMeta": { "message": "Metadata" }, - "setLocale": { "message": "Locale" }, - "setTrackers": { "message": "Trackers" }, - "setSecurity": { "message": "Security" }, + "setCompany": { "message": "회사 정보" }, + "setKeywords": { "message": "키워드" }, + "setEmail": { "message": "이메일 주소" }, + "setPhone": { "message": "휴대폰 번호" }, + "setAddress": { "message": "주소" }, + "setContact": { "message": "연락처 상세" }, + "setSocial": { "message": "소셜 미디어 계정" }, + "setMeta": { "message": "메타데이터" }, + "setLocale": { "message": "언어(지역)" }, + "setTrackers": { "message": "추적기" }, + "setSecurity": { "message": "보안" }, - "attributeIpCountry": { "message": "IP country" }, - "attributeIpRegion": { "message": "IP region" }, - "attributeLanguage": { "message": "Language" }, - "attributeEmail": { "message": "Email address" }, - "attributePhone": { "message": "Phone number" }, + "attributeIpCountry": { "message": "IP 나라" }, + "attributeIpRegion": { "message": "IP 지역" }, + "attributeLanguage": { "message": "언어" }, + "attributeEmail": { "message": "이메일 주소" }, + "attributePhone": { "message": "휴대폰 번호" }, "attributeSkype": { "message": "Skype" }, "attributeWhatsapp": { "message": "WhatsApp" }, - "attributeInferredCompanyName": { "message": "Inferred company name" }, - "attributeTwitter": { "message": "Twitter" }, - "attributeFacebook": { "message": "Facebook" }, - "attributeInstagram": { "message": "Instagram" }, + "attributeInferredCompanyName": { "message": "유추 회사 명" }, + "attributeTwitter": { "message": "트위터" }, + "attributeFacebook": { "message": "페이스북" }, + "attributeInstagram": { "message": "인스타그램" }, "attributeGithub": { "message": "GitHub" }, "attributeTiktok": { "message": "TikTok" }, - "attributeYoutube": { "message": "YouTube" }, + "attributeYoutube": { "message": "유튜브" }, "attributePinterest": { "message": "Pinterest" }, "attributeLinkedin": { "message": "LinkedIn" }, "attributeOwler": { "message": "Owler" }, - "attributeTitle": { "message": "Title" }, - "attributeDescription": { "message": "Description" }, - "attributeCopyright": { "message": "Copyright" }, - "attributeCopyrightYear": { "message": "Copyright year" }, - "attributeResponsive": { "message": "Responsive" }, - "attributeCertInfo_issuer": { "message": "Cert issuer" }, - "attributeCertInfo_protocol": { "message": "Cert protocol" }, - "attributeCertInfo_validTo": { "message": "Cert expiry" }, - "attributeHttps": { "message": "SSL/TLS enabled" }, + "attributeTitle": { "message": "제목" }, + "attributeDescription": { "message": "설명" }, + "attributeCopyright": { "message": "저작권" }, + "attributeCopyrightYear": { "message": "저작 년도" }, + "attributeResponsive": { "message": "반응형" }, + "attributeCertInfo_issuer": { "message": "인증서 발행자" }, + "attributeCertInfo_protocol": { "message": "인증서 프로토콜" }, + "attributeCertInfo_validTo": { "message": "인증서 만료" }, + "attributeHttps": { "message": "SSL/TLS 활성화됨" }, "attributeTrackerGoogleAnalytics": { "message": "Google Analytics" }, "attributeTrackerGoogleAdSense": { "message": "Google AdSense" }, "attributeTrackerMedianet": { "message": "Medianet" }, - "attributeTrackerFacebook": { "message": "Facebook" }, - "attributeTrackerOptimizely": { "message": "Optimizely" }, - "attributeCompanyName": { "message": "Company name" }, - "attributeIndustry": { "message": "Industry" }, - "attributeAbout": { "message": "About" }, - "attributeLocations": { "message": "Locations" }, - "attributeCompanySize": { "message": "Company size" }, - "attributeCompanyType": { "message": "Company type" }, - "attributeCompanyFounded": { "message": "Company founded" }, - "attributeKeywords": { "message": "Keywords" }, + "attributeTrackerFacebook": { "message": "페이스북" }, + "attributeTrackerOptimizely": { "message": "최적화" }, + "attributeCompanyName": { "message": "회사 정보" }, + "attributeIndustry": { "message": "산업" }, + "attributeAbout": { "message": "정보" }, + "attributeLocations": { "message": "위치" }, + "attributeCompanySize": { "message": "회사 크기" }, + "attributeCompanyType": { "message": "회사 종류" }, + "attributeCompanyFounded": { "message": "회사 상장" }, + "attributeKeywords": { "message": "키워드" }, + "attributeDns_spf": { "message": "SPF 레코드" }, + "attributeDns_dmarc": { "message": "DMARC 레코드" }, + "attributeSchemaOrgTypes": { "message": "schema.org 타입" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "포럼 소프트웨어" }, @@ -128,7 +131,7 @@ "categoryName39": { "message": "웹캠" }, "categoryName40": { "message": "프린터" }, "categoryName41": { "message": "결제 처리" }, - "categoryName42": { "message": "Tag managers" }, + "categoryName42": { "message": "태그 관리자" }, "categoryName44": { "message": "CI" }, "categoryName46": { "message": "원격 접속" }, "categoryName47": { "message": "개발" }, @@ -154,18 +157,18 @@ "categoryName67": { "message": "쿠키 동의" }, "categoryName68": { "message": "접근성" }, "categoryName69": { "message": "소셜 로그인" }, - "categoryName70": { "message": "SSL/TLS certificate authorities" }, - "categoryName71": { "message": "Affiliate programs" }, - "categoryName72": { "message": "Appointment scheduling" }, - "categoryName73": { "message": "Surveys" }, - "categoryName74": { "message": "A/B testing" }, - "categoryName75": { "message": "Email" }, - "categoryName76": { "message": "Personalisation" }, - "categoryName77": { "message": "Retargeting" }, + "categoryName70": { "message": "SSL/TLS 인증 기관" }, + "categoryName71": { "message": "제휴 프로그램" }, + "categoryName72": { "message": "약속 스케줄링" }, + "categoryName73": { "message": "설문" }, + "categoryName74": { "message": "A/B 테스팅" }, + "categoryName75": { "message": "이메일" }, + "categoryName76": { "message": "개인화" }, + "categoryName77": { "message": "리타겟팅" }, "categoryName78": { "message": "RUM" }, - "categoryName79": { "message": "Geolocation" }, - "categoryName80": { "message": "WordPress themes" }, - "categoryName81": { "message": "Shopify themes" }, - "categoryName82": { "message": "Drupal themes" }, - "categoryName83": { "message": "Browser fingerprinting" } + "categoryName79": { "message": "위치" }, + "categoryName80": { "message": "WordPress 테마" }, + "categoryName81": { "message": "Shopify 테마" }, + "categoryName82": { "message": "Drupal 테마" }, + "categoryName83": { "message": "브라우저 지문 (fingerprinting)" } } diff --git a/src/drivers/webextension/_locales/pl/messages.json b/src/drivers/webextension/_locales/pl/messages.json index 5abce19fd..d869ce66e 100644 --- a/src/drivers/webextension/_locales/pl/messages.json +++ b/src/drivers/webextension/_locales/pl/messages.json @@ -86,6 +86,10 @@ "attributeCompanyType": { "message": "Company type" }, "attributeCompanyFounded": { "message": "Company founded" }, "attributeKeywords": { "message": "Keywords" }, + "attributeDns_spf": { "message": "SPF record" }, + "attributeDns_dmarc": { "message": "DMARC record" }, + "attributeSchemaOrgTypes": { "message": "schema.org types" }, + "categoryName1": { "message": "System zarządzania treścią" }, "categoryName2": { "message": "Forum" }, "categoryName3": { "message": "Menedżer baz danych" }, diff --git a/src/drivers/webextension/_locales/pt/messages.json b/src/drivers/webextension/_locales/pt/messages.json index 22588deaf..0921f9b27 100644 --- a/src/drivers/webextension/_locales/pt/messages.json +++ b/src/drivers/webextension/_locales/pt/messages.json @@ -86,6 +86,9 @@ "attributeCompanyType": { "message": "Company type" }, "attributeCompanyFounded": { "message": "Company founded" }, "attributeKeywords": { "message": "Keywords" }, + "attributeDns_spf": { "message": "SPF record" }, + "attributeDns_dmarc": { "message": "DMARC record" }, + "attributeSchemaOrgTypes": { "message": "schema.org types" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "Fórum" }, diff --git a/src/drivers/webextension/_locales/pt_BR/messages.json b/src/drivers/webextension/_locales/pt_BR/messages.json index 2cda152dd..299969804 100644 --- a/src/drivers/webextension/_locales/pt_BR/messages.json +++ b/src/drivers/webextension/_locales/pt_BR/messages.json @@ -86,6 +86,9 @@ "attributeCompanyType": { "message": "Company type" }, "attributeCompanyFounded": { "message": "Company founded" }, "attributeKeywords": { "message": "Keywords" }, + "attributeDns_spf": { "message": "SPF record" }, + "attributeDns_dmarc": { "message": "DMARC record" }, + "attributeSchemaOrgTypes": { "message": "schema.org types" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "Fórum" }, diff --git a/src/drivers/webextension/_locales/ro/messages.json b/src/drivers/webextension/_locales/ro/messages.json index 70a870844..4c253c69c 100644 --- a/src/drivers/webextension/_locales/ro/messages.json +++ b/src/drivers/webextension/_locales/ro/messages.json @@ -86,6 +86,9 @@ "attributeCompanyType": { "message": "Company type" }, "attributeCompanyFounded": { "message": "Company founded" }, "attributeKeywords": { "message": "Keywords" }, + "attributeDns_spf": { "message": "SPF record" }, + "attributeDns_dmarc": { "message": "DMARC record" }, + "attributeSchemaOrgTypes": { "message": "schema.org types" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "Forum de discuții" }, diff --git a/src/drivers/webextension/_locales/ru/messages.json b/src/drivers/webextension/_locales/ru/messages.json index 10e4f61ad..687ddca32 100644 --- a/src/drivers/webextension/_locales/ru/messages.json +++ b/src/drivers/webextension/_locales/ru/messages.json @@ -86,6 +86,9 @@ "attributeCompanyType": { "message": "Company type" }, "attributeCompanyFounded": { "message": "Company founded" }, "attributeKeywords": { "message": "Keywords" }, + "attributeDns_spf": { "message": "SPF record" }, + "attributeDns_dmarc": { "message": "DMARC record" }, + "attributeSchemaOrgTypes": { "message": "schema.org types" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "Форум" }, diff --git a/src/drivers/webextension/_locales/sk/messages.json b/src/drivers/webextension/_locales/sk/messages.json index 2cc0f8343..e20832a02 100644 --- a/src/drivers/webextension/_locales/sk/messages.json +++ b/src/drivers/webextension/_locales/sk/messages.json @@ -86,6 +86,9 @@ "attributeCompanyType": { "message": "Company type" }, "attributeCompanyFounded": { "message": "Company founded" }, "attributeKeywords": { "message": "Keywords" }, + "attributeDns_spf": { "message": "SPF record" }, + "attributeDns_dmarc": { "message": "DMARC record" }, + "attributeSchemaOrgTypes": { "message": "schema.org types" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "Message Board" }, diff --git a/src/drivers/webextension/_locales/tr/messages.json b/src/drivers/webextension/_locales/tr/messages.json index 4a07825db..619ea9bc3 100644 --- a/src/drivers/webextension/_locales/tr/messages.json +++ b/src/drivers/webextension/_locales/tr/messages.json @@ -86,6 +86,9 @@ "attributeCompanyType": { "message": "Company type" }, "attributeCompanyFounded": { "message": "Company founded" }, "attributeKeywords": { "message": "Keywords" }, + "attributeDns_spf": { "message": "SPF record" }, + "attributeDns_dmarc": { "message": "DMARC record" }, + "attributeSchemaOrgTypes": { "message": "schema.org types" }, "categoryName1": { "message": "İçerik Yönetim Sistemi" }, "categoryName2": { "message": "Mesaj Tahtası" }, diff --git a/src/drivers/webextension/_locales/uk/messages.json b/src/drivers/webextension/_locales/uk/messages.json index f455511d7..dad6d7ec5 100644 --- a/src/drivers/webextension/_locales/uk/messages.json +++ b/src/drivers/webextension/_locales/uk/messages.json @@ -86,7 +86,9 @@ "attributeCompanyType": { "message": "Company type" }, "attributeCompanyFounded": { "message": "Company founded" }, "attributeKeywords": { "message": "Keywords" }, - + "attributeDns_spf": { "message": "SPF record" }, + "attributeDns_dmarc": { "message": "DMARC record" }, + "attributeSchemaOrgTypes": { "message": "schema.org types" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "Форум" }, diff --git a/src/drivers/webextension/_locales/uz/messages.json b/src/drivers/webextension/_locales/uz/messages.json index 350b27c94..b3f466e6a 100644 --- a/src/drivers/webextension/_locales/uz/messages.json +++ b/src/drivers/webextension/_locales/uz/messages.json @@ -86,6 +86,9 @@ "attributeCompanyType": { "message": "Company type" }, "attributeCompanyFounded": { "message": "Company founded" }, "attributeKeywords": { "message": "Keywords" }, + "attributeDns_spf": { "message": "SPF record" }, + "attributeDns_dmarc": { "message": "DMARC record" }, + "attributeSchemaOrgTypes": { "message": "schema.org types" }, "categoryName1": { "message": "CMS (KBT)" }, "categoryName2": { "message": "Forum" }, diff --git a/src/drivers/webextension/_locales/zh_CN/messages.json b/src/drivers/webextension/_locales/zh_CN/messages.json index 835322922..84f3e4599 100644 --- a/src/drivers/webextension/_locales/zh_CN/messages.json +++ b/src/drivers/webextension/_locales/zh_CN/messages.json @@ -86,6 +86,9 @@ "attributeCompanyType": { "message": "Company type" }, "attributeCompanyFounded": { "message": "Company founded" }, "attributeKeywords": { "message": "Keywords" }, + "attributeDns_spf": { "message": "SPF record" }, + "attributeDns_dmarc": { "message": "DMARC record" }, + "attributeSchemaOrgTypes": { "message": "schema.org types" }, "categoryName1": { "message": "内容管理系统(CMS)" }, "categoryName2": { "message": "信息板" }, diff --git a/src/drivers/webextension/_locales/zh_TW/messages.json b/src/drivers/webextension/_locales/zh_TW/messages.json index e22bc1e74..1556c4287 100644 --- a/src/drivers/webextension/_locales/zh_TW/messages.json +++ b/src/drivers/webextension/_locales/zh_TW/messages.json @@ -86,6 +86,9 @@ "attributeCompanyType": { "message": "Company type" }, "attributeCompanyFounded": { "message": "Company founded" }, "attributeKeywords": { "message": "Keywords" }, + "attributeDns_spf": { "message": "SPF record" }, + "attributeDns_dmarc": { "message": "DMARC record" }, + "attributeSchemaOrgTypes": { "message": "schema.org types" }, "categoryName1": { "message": "內容管理系統(CMS)" }, "categoryName2": { "message": "留言板/討論區" }, diff --git a/src/drivers/webextension/css/styles.css b/src/drivers/webextension/css/styles.css index dabf5fa36..989064554 100644 --- a/src/drivers/webextension/css/styles.css +++ b/src/drivers/webextension/css/styles.css @@ -13,6 +13,7 @@ * { box-sizing: border-box; + scrollbar-width: none; } body { @@ -23,10 +24,13 @@ body { font-size: .9rem; line-height: 1.5rem; margin: 0; - width: 34rem; overflow-x: hidden; } +.body__popup { + width: 34rem; +} + a, a:focus, a:hover { color: var(--color-primary); outline: none; diff --git a/src/drivers/webextension/html/options.html b/src/drivers/webextension/html/options.html index 9b4efbeab..2535cc15f 100644 --- a/src/drivers/webextension/html/options.html +++ b/src/drivers/webextension/html/options.html @@ -11,7 +11,7 @@ - +
diff --git a/src/drivers/webextension/html/popup.html b/src/drivers/webextension/html/popup.html index 56c90f39e..3dcccc270 100644 --- a/src/drivers/webextension/html/popup.html +++ b/src/drivers/webextension/html/popup.html @@ -11,7 +11,7 @@ - +