Веб-расширение Safari для iOS: надежно обнаруживает «страницы с описанием одежды» (PDP), чтобы отображать пользовательскJavascript

Форум по Javascript
Ответить
Anonymous
 Веб-расширение Safari для iOS: надежно обнаруживает «страницы с описанием одежды» (PDP), чтобы отображать пользовательск

Сообщение Anonymous »

Я создаю Веб-расширение Safari для iOS (сценарий содержимого) и хочу, чтобы пользовательский интерфейс расширения отображался только тогда, когда пользователь находится на одной странице сведений о товаре одежды (PDP) (вещи, которые можно носить на теле: одежда, обувь, носимые аксессуары).
Все остальное в Интернете должно скрывать расширение:
  • PLP/страницы категорий/результаты поиска
  • домашние страницы, редакционные статьи, блоги
  • корзина/оформление заказа/аккаунт
  • PDP, не относящиеся к одежде (электроника, винты, мебель, красота и т. д.)

Ограничения

  • Необходимо запускать на устройстве (без вызовов сервера)
  • Макс. классификация за 1 секунду
  • Минимальный процессор/память (избегайте сканирования огромного DOM / document.body.innerText)
  • Должен работать во многих розничных магазинах, на разных языках и на сайтах SPA (контент загружается после первоначального DOM)

Текущий подход

У меня есть эвристический конвейер:
  • Обнаружение страниц листинга (PLP) и возврат false
  • Определить страницы товаров (PDP) с помощью схемы.org/JSON-LD + добавление в корзину + ценовые сигналы
  • Окончательный фильтр: ключевые слова, связанные с одеждой
Но я столкнулся с двумя проблемами:
  • Ложные срабатывания на товары, не связанные с одеждой (например, духи, свечи, электроника), поскольку сигналы PDP, такие как цена + добавление в корзину + Schema.org Product, часто встречаются на всех типах страниц товаров.
  • Ложные срабатывания из-за соответствия ключевых слов, поскольку при сканировании текста страницы (даже ограниченного) выявляются термины, связанные с одеждой. заголовки/нижние колонтитулы/рекомендации («Завершить внешний вид», «возврат» и т. д.)

Пример упрощенного кода

Код: Выделить всё

function isProductPage() {
// any Product JSON-LD => true (too loose)
const scripts = document.querySelectorAll('script[type="application/ld+json"]');
for (const s of scripts) {
try {
const data = JSON.parse(s.textContent);
if (JSON.stringify(data).includes('"@type":"Product"')) return true;
} catch {}
}
// fallback: add-to-cart button / price regex
return !!document.querySelector('button, input[type="submit"]');
}

function isClothingRelated() {
// currently too broad; sometimes scans body text or large sections
const text = (document.title + " " + document.body.innerText).toLowerCase();
return /shirt|t-shirt|dress|pants|jeans|shoes|sneakers/.test(text);
}

function shouldShowExtension() {
if (isListingPage()) return false;
if (!isProductPage()) return false;
return isClothingRelated();
}

Что я ищу

Я ищу надежную и легкую эвристику (или проверенную миниатюрную модель) для классификации:
✅ ПРП по одной одежде

❌ все остальное (включая PDP, не связанные с одеждой)
Конкретно:
  • Каков хороший быстрый способ обнаружить PDP по одному продукту и PLP?

    структурированные данные ( + предложение против ItemList/

    Код: Выделить всё

    CollectionPage
    и т. д.)
  • Сигналы DOM (селектор вариантов, добавление в корзину, цена)
  • Шаблоны URL (дешевый ранний фильтр)
[*]Какие надежные сигналы для носимой одежды/одежды не требуют сканирования текст всей страницы?
  • определение селектора размера (XS–XXL, размеры обуви ЕС/США, «один размер»)
  • шаблоны вариантов вариантов
  • поля категории/productType на Schema.org
[*]Как объединить несколько слабых сигналы в систему быстрой оценки (с приоритетом точности, но без пропуска большинства PDP по одежде)?

[*]Есть какие-нибудь советы по работе с SPA (повторно запускать через MutationObserver без повторного выполнения дорогостоящей работы)?


Если кто-нибудь реализовал подобное «обнаружение типа страницы» в веб-расширении, я был бы признателен за рекомендации или примеры минимального, высокопроизводительного конвейера обнаружения.

Подробнее здесь: https://stackoverflow.com/questions/798 ... -pages-pdp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»