7

HREF onClickハンドラーを使用してリンクの非常に標準的なJS動作をプログラムしようとしていますが、Androidでのフォーカス/タッチモードの動作と思われるものが原因で奇妙な問題が発生しています。

リンクをクリックすると、アクションを実行する代わりに、フォーカス長方形だけ、または塗りつぶされたフォーカス長方形(フォーカスされているだけではなく選択されている)のいずれかで、単に選択/フォーカスされるようになることがあります。

現在の擬似コードは

<a href="#" onClick="toggleDivBelowToShowHide(); return false;">go</a>

私は次のようなことを試みました:

<a href="#" onTouchStart="toggleDivBelowToShowHide(); return false;">go</a>

しかし、私はまだ時々同じ厄介な問題を抱えています。

4

5 に答える 5

2

WebView で Javascript を有効にしてみてください。

ウェブビューを保持するアクティビティで、これを試してください...

WebView wv = (WebView) findViewById(R.id.webview);
wv.getSettings().setJavaScriptEnabled(true);

私は彼と同じ問題を抱えていましたが、Javascriptを有効にしていないことが原因であることがわかりました。

于 2010-03-03T07:48:15.133 に答える
0

最近、まったく同じ問題に遭遇しました。私はボタンのonclickを使用していました。時々それはjavascriptをまったく実行しませんでした。私のために働いたのは、WebビューにURLをロードする前にJavaScriptを有効にすることでした

    // Enable javascript
    WebSettings webSettings = mWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);

    // To bind javascript code to android
    mWebView.addJavascriptInterface(new JavaScriptInterface(this), "Android");

    mWebView.loadUrl(url);
于 2011-09-23T08:18:24.030 に答える
0

この「ドライバー」をページのコードに挿入してみて、動作するかどうかをお知らせください。. . 同じ問題を抱えていた私のサイトで動作しているようです:

//Mouse & Touch -> Consistent Click / Mouse Commands -> Useful driver
(function() {
  var isTouch = false;
  var simulated_flag = 'handler_simulated';
  var touch_click_array = {};
  const clickMoveThreshold = 20; //Pixels

  function mouseHandler(event) {
    if (isTouch) {
      if (!event.hasOwnProperty(simulated_flag)) {
        //Unreliable mouse commands - In my opinion
        var fixed = new jQuery.Event(event);
        fixed.preventDefault();
        fixed.stopPropagation();
      }
    }
    else {
      //Mouse commands are consistent
      //TODO: generate corresponding touches
    }
  }

  function mouseFromTouch(type, touch) {
    var event = document.createEvent("MouseEvent");
    event.initMouseEvent(type, true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY
      , false, false, false, false, 0, null);
    event[simulated_flag] = true;

    touch.target.dispatchEvent(event);
  };

  function touchHandler(event) {
    var touches = event.changedTouches
      ,first = touches[0]
      ,type = ""
      ;

    if (!event.hasOwnProperty(simulated_flag)) {
      isTouch = true;

      //Simulate mouse commands
      switch (event.type) {
        case "touchstart":
          for (var i = 0; i < touches.length; i++) {
            var touch = touches[i];
            touch_click_array[touch.identifier] = { x: touch.screenX, y: touch.screenY };
          }
          mouseFromTouch("mousedown", first);
          break;

        case "touchmove":
          for (var i = 0; i < touches.length; i++) {
            var touch = touches[i];
            var id = touch.identifier;
            var data = touch_click_array[id];
            if (data !== undefined) {
              if (Math.abs(data.x - touch.screenX) + Math.abs(data.y - touch.screenY) > clickMoveThreshold) {
                delete touch_click_array[id];
              }
            }
          }
          mouseFromTouch("mousemove", first);
          break;

        case "touchcancel":
          //Not sure what should happen here . . .
          break;

        case "touchend":
          mouseFromTouch("mouseup", first);
          for (var i = 0; i < touches.length; i++) {
            var touch = touches[i];
            if (touch_click_array.hasOwnProperty(touch.identifier)) {
              mouseFromTouch("click", touch);
              delete touch_click_array[touch.identifier];
            }
          }
          break;
      }
    }
  }

  document.addEventListener("mousedown", mouseHandler, true);
  document.addEventListener("mousemove", mouseHandler, true);
  document.addEventListener("mouseup", mouseHandler, true);
  document.addEventListener("click", mouseHandler, true);

  document.addEventListener("touchstart", touchHandler, true);
  document.addEventListener("touchmove", touchHandler, true);
  document.addEventListener("touchcancel", touchHandler, true);
  document.addEventListener("touchend", touchHandler, true);

})();

現在、これは 100% 完全なスクリプトではありません。マルチタッチはおそらく少し不安定であり、タッチ コマンドに依存するインターフェイスを構築した場合、このバージョンではそれらを生成しません。しかし、リンククリックの問題は解決しました。

Erm - ps - jQuery を使用しています。jQuery 以外のバージョンが必要な場合は、おそらく関数new jQuery.Eventから を削除するだけで済みmouseHandler()ます (つまり、元の event: を使用しますvar fixed = event;)。ほとんどのブラウザーは問題ないと思います。ただし、私は js 互換性の専門家ではありません。

PPS - Android 1.6 でテスト済み

PPPS - しきい値を許可するようにスクリプトを変更する必要がありました。実際のデバイスでは、プレス中に移動イベントが発生するという問題がありました。おそらく理想的ではありません。誰かがそれを行うためのより良い方法でチャイムを鳴らしたい場合は、聞いてみたいです...

于 2010-03-17T16:28:46.017 に答える
0

属性を削除してみてhref、それが役立つかどうかを確認してください。たとえば、これはWebViewコンポーネントで表示すると機能します。

<p><a onClick="whereami()">Update Location</a></p>
于 2010-02-02T18:06:17.253 に答える
0

それが関連しているのかどうか疑問に思いonclickます -- ときどきリンクをクリックしてもリンクがたどられないと仮定するのは正しいですか? 私には、これは、リンクをクリックするのではなく、リンクのをクリックして少しドラッグするなど、画面に触れる方法 (またはこれがどのように解釈されるか) に関連しているように見えますか?

(私の仮定が正しければ、これはハードウェアの障害である可能性があります。別のデバイスで試すことができますか? または、画面が適切に配置されていない場合にリンクの特定の側でのみ発生し、ソフトウェアのオフセットが存在する可能性があります。変えられる?)

于 2010-02-02T21:55:38.317 に答える