2011-02-06 1 views
0

私はWebViewでMac開発をしています。 URL短縮名で短縮されたURLを展開し、その展開したURLをユーザーに表示したい。Safari - マウスのホバーでXMLHTTPRequest経由でリンクのタイトルを更新していますか?

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

そして、ここでは、関連するだ:だから、次のようになり、ユーザはhttp://google.com

マイリンクタグを表示するには、私が欲しいのリンクタイトルツールチップの上に置いたそのSRC属性http://is.gd/xizMsrに設定されているリンクを、与えられました拡張されたURLを取得するためにはXMLHttpRequestを使用して、タイトルを更新

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; 
    } 
} 

を問題は、私がリンクの上にカーソルを移動して、カーソルを移動を停止するとき、title属性が正しく設定されているであろうが、ジャバスクリプト、ツールチップは表示されません。私は再びツールチップを表示するためにマウスを移動する必要があります。私は必ずしもカーソルをリンクから外してから戻ってくる必要はありませんが、リンク上にマウスを置いたままで数ピクセル移動するだけで、そのトリックができます。

Web InspectorとSafariのJavascriptデバッガを組み合わせて、タイトルが正しく設定されていることがわかりました。実際、リンク上にマウスポインタを移動するとすぐに、「要素」タブにあるDOMのWebインスペクタのビューが新しいタイトルで更新されています。しかし、私がマウスから手を離すと、ツールチップは決して表示されません。

WebKitは、ユーザーがマウスを動かしているときにのみツールチップを表示することを前提としています。カーソルが動いていなくても、 "起きる" Webkitを並べ替える方法はありますか?あるいは、タイトル属性に頼るのではなく、私自身のDHTML-ishの魔法を使ってこれを実装する方が良いでしょうか?

答えて

0

何の要素(アンカーの上に移動)または(onmouseover)します透明な背景を持つラッパー(正のzインデックス)について:

  1. は最初のアンカーのタイトルを追加します(あなたがする必要がありますタイトルは容易に利用できるようになります。この方法で
  2. )あなたの関数を変更して(事実フォアグラウンドでアンカーを置くz-index)カバー要素のための(負の変更)

。必要に応じて、手順1と2の間にsetTimeout()を追加することができます。

setAttributeNodeを使用して、titleの属性値を変更することもできます。

+0

ええ、それは私が望む効果を達成するためにそのような何かをしなければならないように見えるように見えます。私はこれがSafariのバグだと思うので、WebKitの夜間ビルドでどのように動作しているかをチェックし、必要に応じてバグを報告します。後で更新されます。 – bpapa

0

あなたは

「私は リンクの上にカーソルを移動して、カーソルを移動を停止する場合の問題は、 title属性が 、適切に設定されているが、ですが、ツールチップが表示されません。」と述べました

マウスのホバーを開始したときにタイトルが存在しなかったため、表示されないツールチップが表示されない可能性があります。そのため、ツールチップは表示されません。マウスをもう一度動かすと、今度はタイトル属性があるので、ツールチップを表示できます。あなたはそれについてはあまりできません。ブラウザの仕組みだけです。

代わりに、あなたはjQueryのツールチップを使用して試みることができる:jQueryを使ってhttp://www.reynoldsftw.com/2009/03/10-excellent-tooltip-plugins-with-jquery/

ツールチップは、すぐにタイトルが設定されているとして表示されるようにあなたはそれができるよう制御する必要があります。

+0

Webkitのバグだと思います。たぶん、私は "onMouseOver"の正確な意味を理解していないかもしれませんが、私がカーソルを動かしているかどうかは、それとは関係がありません。 – bpapa

関連する問題