Debugging Android WebViews?

Debugging Android WebViews?

本文关键字:WebViews Android Debugging      更新时间:2023-09-26

我正在调试一个Android应用程序,该应用程序大量使用WebViews来显示应用程序内的网页。

问题很简单-当我加载页面时,有一个锚在一个页面上,当点击给我一个404。问题是,它只有在从应用程序的WebView中运行页面时才会这样做。如果我在桌面浏览器中加载页面,或者从Chrome或从手机上的Android浏览器中加载页面,我加载页面都很好。

更令人困惑的是,在同一页面上有另一个具有相同基本架构的锚点,它工作得很好。

锚的URL正在通过JQuery设置:

var url = ...;
$('#submitButton').attr('href', url);

当我在桌面浏览器上加载页面时,我可以看到锚指向的URL,并且它是正确的。当我在应用程序的WebView中运行页面时,我看不到锚点指向的URL,所以当它失败时,我不知道为什么。

我目前使用VS2013和IIS Express运行该网站,设置了绑定和防火墙,因此我可以从我的机器上访问它。我正在Android Studio 1.1.0中构建应用程序,并在GenyMotion模拟器中运行该应用程序。

是否有任何方法我可以检查加载到webview的网页的DOM,所以我可以确切地看到我们试图加载的URL ?或者我能调试构建URL的javascript吗?

是否有任何方法我可以检查一个网页的DOM加载到一个webview,>所以我可以看到我们试图加载什么URL ?或者我可以调试构建URL的javascript吗?

是的,但也许不是用你现在的工具。如果你有一个android设备连接到你的电脑,你可以很容易地调试你的电脑上的chrome浏览器。有关详情,请参阅以下内容:https://developer.chrome.com/devtools/docs/remote-debugging

可以配置WebView,使console.log()消息显示在LogCat中。你需要在WebView上设置WebChromeClient,然后在你的客户端实现onConsoleMessage()。从http://developer.android.com/guide/webapps/debugging.html:

WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.setWebChromeClient(new WebChromeClient() {
    public void onConsoleMessage(String message, int lineNumber, String sourceID) {
    Log.d("MyApplication", message + " -- From line "
        + lineNumber + " of "
        + sourceID);
    }
});

这让我远远弄清楚我的问题是什么- javascript初始化的链接依赖于LocalStorage, LocalStorage和SessionStorage不启用,在WebViews,默认情况下。您需要通过调用setDomStorageEnabled()来启用它。(你还需要启用javascript,但我已经这样做了):

WebView myWebView = (WebView) findViewById(R.id.webview);
WebSettings settings = myWebView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setDomStorageEnabled(true);