Расширения браузера Chrome: как активировать действие страницы для всех исходящих ссылок определенной страницы?

Я хочу, чтобы действие моей страницы активировалось для всех исходящих ссылок с определенной страницы. Как я могу это сделать? Я просмотрел документы безрезультатно. Любые указатели будут оценены!


person int3    schedule 20.03.2010    source источник


Ответы (2)


  1. API Google Chrome не имеет такого API, но необходимые вам функции могут быть реализованы с использованием стандартного API расширений Google Chrome.
  2. Вам необходимо реализовать скрипт содержимого.
  3. Ваш сценарий контента должен изменить DOM страницы, которую вы хотите обработать, и переопределить все исходящие ссылки с помощью вашего собственного javascript, который будет выполнять некоторые действия и открывать ссылку по клику.

Чтобы изменить ссылку href, вы можете сделать что-то вроде этого:

function processLink(element, newHref) {
  var a = document.createElement("a");
  a.href        = newHref;
  a.textContent = element.textContent;
  a.title       = element.title;

  element.parentNode.replaceChild(a, element);
}

ОБНОВЛЕНИЕ 1.

Вместо newHref вы можете создать что-то вроде

a.href = "javascript:processOutgoingLinkClick('" + element.href + "')"

Функция processOutgoingLinkClick должна содержать фактическую обработку клика.

person uthark    schedule 20.03.2010
comment
Я думал о чем-то подобном на самом деле. Но как ссылка будет сигнализировать новой вкладке о том, что она должна активировать действие страницы? - person int3; 20.03.2010
comment
вы можете добавить функцию processOutgoingLinkClick() и отобразить a.href = javascript:processOutgoingLinkClick(' + element.href + ') Функция processOutgoingLinkClick должна содержать фактическую обработку. - person uthark; 20.03.2010
comment
а теперь понял. Однако... смогу ли я определить, хотел ли пользователь открыть вкладку на той же странице, в новой вкладке или в новом окне? Тем не менее, это будет незначительная проблема. Спасибо! - person int3; 20.03.2010
comment
Хм, по крайней мере, у вас есть целевой атрибут исходной ссылки, но я не уверен, что этого достаточно. - person uthark; 20.03.2010

Любопытно, почему вы не используете события вкладки Chrome Extensions, которые вы может прослушивать onUpdated onCreated. Когда пользователь щелкает ссылку на странице, он переходит и запускает событие в onUpdated.

Итак, в вашем background.html вы можете сделать:

chrome.tabs.onUpdated.addListener(function(tabId, info) {
  if (info.status === 'loading')
    console.log('Loading url ... ' + info.url)
});

То же самое для onCreated. Затем, пока он загружается, вы можете решить, что делать с вашим pageAction.

person Mohamed Mansour    schedule 20.03.2010