Macos Safari-更新链接';鼠标悬停时通过XMLHTTPRequest的标题?
我正在网络视图中进行Mac开发。我想扩展被url缩短器缩短的url,并向用户显示扩展后的url。因此,给定一个src属性设置为的链接,当用户将鼠标悬停在该链接上时,我希望显示标题工具提示 我的链接标签如下所示:Macos Safari-更新链接';鼠标悬停时通过XMLHTTPRequest的标题?,macos,safari,uiwebview,webkit,xmlhttprequest,Macos,Safari,Uiwebview,Webkit,Xmlhttprequest,我正在网络视图中进行Mac开发。我想扩展被url缩短器缩短的url,并向用户显示扩展后的url。因此,给定一个src属性设置为的链接,当用户将鼠标悬停在该链接上时,我希望显示标题工具提示 我的链接标签如下所示: <a href="http://is.gd/xizMsr" onMouseOver="myFunction(this);">Here's a shortened link to google</a> 问题是,当我将鼠标悬停在链接上,然后停止移动光标时,标题属性设
<a href="http://is.gd/xizMsr" onMouseOver="myFunction(this);">Here's a shortened link to google</a>
问题是,当我将鼠标悬停在链接上,然后停止移动光标时,标题属性设置正确,但工具提示不显示。我必须再次移动鼠标才能显示工具提示。我不一定要将光标从链接上移开,然后再移回到链接上,但只要在保持悬停在链接上的同时移动几个像素就可以了
我知道,通过在Safari中使用Web检查器和Javascript调试器,可以正确设置标题。事实上,只要我将鼠标悬停在链接上,我就会看到“元素”选项卡中Web Inspector的DOM视图更新为新标题。但是,如果我把手从鼠标上拿开,工具提示永远不会显示
我的假设是,WebKit仅在用户移动鼠标时显示工具提示。即使光标不动,是否有一种方法可以“唤醒”webkit?还是我最好用自己的DHTML魔法来实现它,而不是依赖title属性?你说的
“问题是,当我停留在
链接,然后停止移动光标,
标题属性设置正确,
但不会显示工具提示。“
很可能是因为启动鼠标悬停时标题不存在,因此无法显示任何工具提示(没有任何可显示的内容)。因此不会出现工具提示。再次移动鼠标时,这次它确实有一个title属性,因此可以显示工具提示。对此你无能为力,这只是浏览器的工作方式
相反,您可以尝试使用jQuery工具提示:
使用jQuery,您应该能够控制它,以便在设置标题后立即显示工具提示。对于元素(将其移动到锚点上)或具有透明背景的包装器(正z索引),它将(onmouseover
):
z-index
(有效地将锚定放在前景中)setTimeout()
或者您可以简单地使用来修改
title
属性值。我认为这是Webkit中的一个bug。也许我不明白“onMouseOver”的确切含义,但我是否移动光标应该与此无关。是的,看来我必须做类似的事情才能达到预期的效果。我认为这是Safari中的一个bug,所以我将检查它在WebKit夜间构建中是如何工作的,并在需要时提交一个bug。稍后将更新。
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;
}
}