Обнаружение щелчков внутри iframe снаружи? - PullRequest
3 голосов
/ 05 ноября 2008

Вот сценарий. В iframe загружен контент с другого сайта. Я нажимаю на ссылку внутри фрейма.

Можно ли как-то поймать вне iframe что это за ссылка?

UPDATE Так как я получил вопрос, чисты ли мои намерения, я бы объяснил больше о сценарии использования. Может быть, я начал в неправильном направлении для этой задачи.

Итак, у нас есть настольный клиент, который ходит по сети (для совершения покупок на самом деле), и когда клиент находит что-то, что он хочет купить, он нажимает на «это» (что угодно - изображение, ссылка, адрес) и отправляет «это» наш сервис, где вручную разрешено ссылаться на товар и трансформируется для записи в ее реестр. Ничего необычного.

Теперь задача сделать его веб-приложением. Итак, клиент регистрируется на нашем сайте и начинает просматривать интернет-магазины. Следовательно, мой первый выбор был iframe. Но вопрос в том, как найти то, на что она нажала?

Или вообще - как сохранить «закладку» на каком-то объекте с другого сайта?

Ответы [ 6 ]

5 голосов
/ 05 ноября 2008

Если страницы не находятся в одном домене, то сделать это невозможно. Ваши сценарии не видны в разных доменах.

1 голос
/ 06 декабря 2010

Вы можете попробовать метод невидимого div-клика, где у вас есть div-метка iframe и зарегистрировать серверную часть клика на hide, когда они наведутся на него.

https://gist.github.com/729591

1 голос
/ 05 ноября 2008

Если это с другого сайта, то я знаю только один способ - написать информацию, необходимую для свойства iframe window.name.

То, что , вы можете прочитать из своего основного документа.

0 голосов
/ 20 ноября 2008

Один из способов сделать это - создать букмарклет. Пользователь будет регулярно просматривать сайты, а затем, если найдет сайт, который он хочет добавить в качестве закладки через ваше веб-приложение, он может просто нажать на букмарклет.

Букмарклет - это функция javascript, которая, возможно, отображает модальное диалоговое окно, которое затем может удаленно обращаться к закладкам вашего сайта.

Например, Facebook Bookmarklet , любое количество Delicious букмарклетов.

Тогда ваше веб-приложение просто предоставит способ упорядочить закладки, которые люди сохраняют, используя ваш букмарклет. Вы также можете заглянуть в плагин Firefox, но букмарклеты - это решение, более подходящее для разных браузеров.

0 голосов
/ 19 ноября 2008

Нет способа сделать это на самом деле. Транспорт window.name, указанный выше, не будет работать без сотрудничества с посещаемым сайтом. Нет доступа к window.name, если родитель и потомок не находятся в одном домене.

Недавно я справился с этим, установив window.name внутри дочернего элемента, а затем перенаправив на страницу 404 домена родителя. Внезапно родительский фрейм может прочитать значение iframeID.contentWindow.name и получить информацию. Но это перенаправление было сделано моей страницей в iframe.

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

0 голосов
/ 05 ноября 2008

Если ваш iframe находится в том же домене, просто добавьте прослушиватель событий в событие onclick ваших ссылок.

Пример:

<a href="javascript:void(0)" onclick="top.harvestLink(this)" title="Item=foo" alt="">Foo</a>

Затем на странице, где размещен фрейм, у вас есть обработчик:

function harvestLink(anAnchor,aShoppingListArray) {
  var itemName = anAnchor.title.split("=")[1];
  aShoppingList.push({item:itemName,dateStamp:new Date()});
}

Это упрощенный пример, иллюстрирующий принцип. Возможно, вы захотите добавить другую информацию в тег title, в этом случае вы будете анализировать по-другому, и вы можете использовать другой атрибут, чем «title» для хранения этого. Уборка вы можете сделать самостоятельно. Это также можно сделать (проще, IMO) с помощью элементов кнопки вместо якорных тегов, но обязательно установите для атрибута типа кнопки значение «кнопка», иначе IE отправит форму.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...