Расширение Safari — слишком много введенных скриптов, отвечающих на сообщение

Я пытаюсь написать расширение для сафари, похожее на Bubble Translate для Chrome.

когда вы нажимаете кнопку на панели инструментов, он автоматически переводит выбранный в данный момент текст на язык по вашему выбору с помощью языкового API Google.

Проблема у меня следующая:

Скрипт внедряется не только на главную страницу, но и в рекламу и тому подобное, встроенное в страницу. Из-за этого выделенный текст переводится несколько раз, потому что все встроенные скрипты на одной странице реагируют на сообщение.

Как я могу убедиться, что скрипт внедряется только на нужную страницу или отвечает только правильная страница?


person Philipp    schedule 16.06.2010    source источник


Ответы (2)


Когда глобальный скрипт отвечает на сообщение от внедренного скрипта, включите URL-адрес целевой вкладки в ответное сообщение, например:

var message = {
  translation: result.translation,
  url: event.target.url
}
event.target.page.dispatchMessage("displayTranslation", message);

Затем в обработчике сообщений внедренного скрипта проверьте, соответствует ли URL-адрес, переданный в сообщении, URL-адресу страницы, например:

if (event.name === "displayTranslation" && 
     event.message.url === window.location.href) {
  alert(event.message.translation);
}

Таким образом, на ответ будет воздействовать только скрипт в кадре, который инициировал запрос.

person chulster    schedule 21.06.2011

Возможно, вы могли бы проверить, что страница, на которую вводится скрипт, не находится внутри фрейма:

if (window == window.parent) { /* you're not inside a frame! */ }

Я не уверен, что это работает внутри тегов <object>, встраивающих HTML. Скорее всего, да.

person zneak    schedule 17.06.2010