我正在尝试调试Android应用,该应用大量使用WebView来显示应用内的网页。
问题很简单 - 当我加载页面时,在一个页面上有一个锚点,点击后会给我一个404.问题是,只有在应用程序内运行页面时才会这样做。的WebView。如果我在桌面浏览器中,或在Chrome中或在移动设备上的Android浏览器中加载页面,我会加载页面。
更令人困惑的是,在同一页面上有另一个锚点,它具有相同的基本架构,可以正常工作。
通过JQuery设置锚点的URL:
var url = ...;
$('#submitButton').attr('href', url);
当我在桌面浏览器上加载页面时,我可以看到锚点指向的URL,并且它是正确的。当我在应用程序的WebView中运行页面时,我看不到锚点指向的URL,因此当它失败时,我不知道原因。
我目前正在使用VS2013和IIS Express运行网站,并设置了绑定和防火墙,以便我可以从我的计算机上访问它。我在Android Studio 1.1.0中构建应用程序,并在GenyMotion模拟器中运行应用程序。
有什么方法可以检查加载到webview中的网页的DOM,这样我就可以确切地看到我们正在尝试加载哪个网址?或者我可以调试构建该URL的javascript的任何方式吗?
答案 0 :(得分:1)
有什么方法可以检查加载到webview中的网页的DOM,>所以我可以确切地看到我们要加载的网址是什么?或者我可以调试任何方式>构建该URL的javascript?
是的,但也许不适合您当前的工具。 但是,如果你有一个连接到你的计算机的Android设备,你实际上可以轻松地在计算机上使用chrome调试webview。 有关详细信息,请参阅以下内容 https://developer.chrome.com/devtools/docs/remote-debugging
答案 1 :(得分:1)
可以配置WebView,以便在LogCat中显示console.log()消息。您需要在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);
}
});
这让我足够清楚我的问题是什么 - 默认情况下,在WebViews中,初始化链接的javascript依赖于LocalStorage,并且未启用LocalStorage和SessionStorage。您需要通过调用setDomStorageEnabled()来启用它。 (你还需要启用javascript,但我已经这样做了):
WebView myWebView = (WebView) findViewById(R.id.webview);
WebSettings settings = myWebView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setDomStorageEnabled(true);