3

Twitter Bootstrap 3 と固定トップ ナビゲーション バーを使用します。
Android アプリケーション内に Webview があります。

数週間かけてアプリに多くの機能を追加しましたが、この問題を解決する方法が見つかりませんでした。すべてが一般的に正常に機能します。
ユーザーが固定トップ ナビゲーション バーのリンクをクリックすると、webview が新しい URL を読み込みます。

しかし、
* ユーザーが Web ページをロードすると
* ページの下部に移動
* ページの上部に移動
[パート 1 開始]
* ユーザーがナビゲーションバーのリンクをクリック
* ナビゲーションバーのリンクをクリックできない
* リンクが応答しない
[パート 2 開始]
* ユーザー ページを非常に少量 (1 ~ 2 mm など) 下に
スクロールし
ます 。

ここでアプリケーション コードを提供できなくて申し訳ありませんが、質問のデバッグに最善を尽くすことができます。PART 1、2、3 の logcat の結果を以下に貼り付けました。

フィドル: http://jsfiddle.net/mavent/X3THf/19/

<nav class="navbar navbar-inverse navbar-fixed-top visible-xs" role="navigation">
    <div class="navbar-header" style="text-align:center;">
        <button type="button" class="navbar-toggle pull-left" data-toggle="collapse" data-target=".navbar-part2"> <span class="sr-only">Toggle navigation</span>
 <span class="icon-bar"></span>
 <span class="icon-bar"></span>
 <span class="icon-bar"></span>

        </button>
        <button type="button" class="navbar-toggle pull-right" data-toggle="collapse" data-target=".navbar-part3" style="padding: 3px 15px;">
            <img src="http://www.wdc.com/Global/images/icons/icon_supporthelp.gif" width="24" height="24" alt="aaaa">
        </button>
        <div style="padding-top: 15px;"> <a href="/page0" title="aaa" style="color:#ffffff;margin-top:40px;">Example.com</a>

        </div>
    </div>
    <div class="collapse navbar-collapse navbar-part2">
        <ul class="nav navbar-nav">
            <li><a href="/page1">page 1</a>

            </li>
            <li><a href="/page2">page 2</a>

            </li>
        </ul>
    </div>
    <div class="collapse navbar-collapse navbar-part3">
        <ul class="nav navbar-nav">
            <li><a href="/page3">page 3</a>

            </li>
            <li><a href="/page4">page 4</a>

            </li>
        </ul>
    </div>

私の webview では、あまり具体的なアクションは行いません。これは一般的な Web ビューです。

mWebView = (WebView) findViewById(R.id.webview);
mWebView.setWebChromeClient(new myWebChromeClient());
mWebView.setWebViewClient(new myWebViewClient());
mWebView.getSettings().setJavaScriptEnabled(true);
String defaultUserAgent = mWebView.getSettings().getUserAgentString();
mWebView.getSettings().setUserAgentString(defaultUserAgent+" my app");

.

[PART 1]
11-09 13:27:03.522  17315-17355/com.example.android E/webcoreglue﹕ Should not happen: no rect-based-test nodes found
11-09 13:27:03.612  17315-17315/com.example.android V/WebViewInputDispatcher﹕ blockWebkitDraw
11-09 13:27:03.612  17315-17315/com.example.android V/WebViewInputDispatcher﹕ blockWebkitDraw lockedfalse
11-09 13:27:03.622  17315-17315/com.example.android V/webview﹕ singleCursorHandlerTouchEvent -getEditableSupport  FASLE
11-09 13:27:03.923  17315-17355/com.example.android D/webview﹕ blockWebkitViewMessage= false

[PART 2]
11-09 13:27:32.711  17315-17315/com.example.android V/WebViewInputDispatcher﹕ blockWebkitDraw
11-09 13:27:32.711  17315-17315/com.example.android V/WebViewInputDispatcher﹕ blockWebkitDraw lockedfalse
11-09 13:27:32.711  17315-17315/com.example.android V/webview﹕ singleCursorHandlerTouchEvent -getEditableSupport  FASLE

[PART 3]
11-09 13:27:42.650  17315-17315/com.example.android V/WebViewInputDispatcher﹕ blockWebkitDraw
11-09 13:27:42.650  17315-17315/com.example.android V/WebViewInputDispatcher﹕ blockWebkitDraw lockedtrue
11-09 13:27:42.650  17315-17315/com.example.android V/webview﹕ singleCursorHandlerTouchEvent -getEditableSupport  FASLE
11-09 13:27:42.961  17315-17355/com.example.android D/webview﹕ blockWebkitViewMessage= false
11-09 13:27:48.176  17315-17355/com.example.android I/GATE﹕ <GATE-M>DEV_ACTION_COMPLETED</GATE-M>
11-09 13:27:48.256  17315-17315/com.example.android W/IInputConnectionWrapper﹕ getSelectedText on inactive InputConnection
11-09 13:27:48.256  17315-17315/com.example.android W/IInputConnectionWrapper﹕ setComposingText on inactive InputConnection
11-09 13:27:48.256  17315-17315/com.example.android W/IInputConnectionWrapper﹕ getExtractedText on inactive InputConnection

そのため、ナビゲーション バーのリンクが機能しないたびに、ユーザーはページをスクロールしてからリンクをクリックする必要があります。

4

2 に答える 2

0

6 月 4 日の編集から、問題がまだ存在し、おそらく Android JB の問題が原因であることがわかります。

Android では問題にならない場合でも、ブートストラップ 3 は JB の webview で使用される Android ブラウザーをサポートしていません。

私が知っている唯一の解決策は、インテルの crosswalk プロジェクト(おそらく Cordova または Google の CCA 経由) を使用して、現在のバージョンの Chromium を Web ビューとしてバンドルすることです。 Androidのバージョンによって異なります。

これの欠点は余分な 18 MB です。これは望ましくないことですが、この方法では、Android のすべてのバージョンでアプリの一貫した webview を取得できます。

于 2014-12-03T20:41:57.840 に答える
0

6 か月後、この問題は依然として存在します。したがって、以下の回答では問題は解決しません。

原因はジェリービーンのエラーです。完全に機能する回避策があります。

新しい WebView クラスを作成し、デフォルトの WebView クラスの代わりに myWebView クラスを使用しました。このトピックは私に大いに役立ちました: Android WebView JellyBean -> すべきではありません: rect-based-test ノードが見つかりません

public class MyWebView extends WebView
{
    Context mContext;

    public MyWebView(Context context)
    {
        super(context);
        mContext = context;
    }

    public MyWebView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        mContext = context;
    }

    public MyWebView(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
        mContext = context;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN){

            int temp_ScrollY = getScrollY();
            scrollTo(getScrollX(), getScrollY() + 1);
            scrollTo(getScrollX(), temp_ScrollY);
        }
        return super.onTouchEvent(event);
    }
}
于 2013-12-05T21:29:30.593 に答える