Safari - обновление заголовка ссылки с помощью XMLHTTPRequest при наведении курсора мыши? - PullRequest
0 голосов
/ 06 февраля 2011

Я занимаюсь разработкой для Mac в WebView.Я хочу расширить URL-адреса, которые были сокращены с помощью средства сокращения URL-адресов, и отобразить этот расширенный URL-адрес для пользователя.Итак, учитывая ссылку, атрибут src которой установлен на http://is.gd/xizMsr,, когда пользователь наводит курсор на ссылку, я хочу, чтобы всплывающая подсказка заголовка отображалась http://google.com

Мой тег ссылки выглядит следующим образом:

<a href="http://is.gd/xizMsr" onMouseOver="myFunction(this);">Here's a shortened link to google</a>

А вот соответствующий javascript, который будет использовать XMLHttpRequest для получения расширенного URL-адреса, а затем обновит заголовок

var myRequest;
var mousedOverElement;
var isLoading = false;

function myFunction(anObject) {
  if (isLoading == false) {

    isLoading = true;
    mousedOverElement = anObject;
    var link = anObject.getAttribute('href');
    var encodedURL = encodeURI(link);
    var url = 'http://is.gd/forward.php?format=simple&shorturl=' + encodedURL;

    myRequest = new XMLHttpRequest();
    myRequest.open("GET", url);
    myRequest.onreadystatechange = onStateChange;
    myRequest.send();
  }
}

function onStateChange()  {
    if (myRequest.readyState==4) { 
        if (myRequest.status==200) {   
            mousedOverElement.setAttribute('title',myRequest.responseText);
        }

        isLoading = false;
    }
}

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

Я знаю, что заголовокустановить правильно из комбинации с использованием веб-инспектора и отладчика Javascript в Safari.Фактически, как только я наведу курсор на ссылку, я вижу, что представление DOM в Web Inspector на вкладке «elements» обновляется новым заголовком.Но если я уберу руку с мыши, всплывающая подсказка никогда не отобразится.

Здесь я предполагаю, что WebKit показывает всплывающую подсказку только тогда, когда пользователь перемещает мышь.Есть ли способ сортировки "пробуждения" webkit, даже если курсор не движется?Или мне лучше реализовать это с помощью моей собственной магии DHTML, а не полагаться на атрибут title?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2011

Как насчет элемента (переместите его поверх якоря) или обертки (положительный z-индекс) с прозрачным фоном, который (onmouseover):

  1. сначала добавит заголовок якоря (вам придется изменить свою функцию)
  2. , а затем изменить ее (отрицательно для элемента покрытия) z-index (фактически поставить якорь на передний план)

Таким образом, заголовокбудет легко доступно.При необходимости вы можете добавить setTimeout() между шагами 1 и 2.

Или вы можете просто использовать setAttributeNode для изменения значения атрибута title.

0 голосов
/ 06 февраля 2011

Вы сказали

"Проблема в том, что, когда я наведите курсор мыши на ссылку, а затем прекратите перемещать курсор, атрибут заголовка будет установлен правильно, но подсказка не будет отображена."*

Вероятно, поскольку заголовок не существовал при запуске наведения мыши, он не мог отображать подсказки (отображать нечего).Так что подсказка не появится.Когда вы снова перемещаете мышь, на этот раз у нее есть атрибут title, поэтому он может отображать подсказку.С этим мало что можно сделать, просто работает браузер.

Вместо этого вы можете попробовать использовать всплывающую подсказку jQuery: http://www.reynoldsftw.com/2009/03/10-excellent-tooltip-plugins-with-jquery/

С помощью jQuery вы сможете его контролировать,всплывающая подсказка появляется, как только заголовок установлен.

...