所以我只编写了一个非常简单的Android应用程序。它包含一个简单的webview,我想向用户显示一个特定的注册页面。但是,由于它是一个javascript webapplication,我无法直接导航到子页面。相反,我需要使用该方法:
public WebResourceResponse shouldInterceptRequest(WebView view, String url)
为了操纵webview。但是,由于某种原因,我不明白我无法滚动页面,它总是跳回到顶部。问题实际上是奇怪的,我需要向您展示我制作的描述问题的视频(文本将变得复杂)。 P lease看看:Youtube video
所以,我认为问题变得清晰了。
另外我发现当我使用WebChromeClient 而没有标准的webview客户端时,我可以滚动。但是,我无法通过应用我需要的shouldInterceptRequest来导航应用程序。
所以这是完整的代码:
package com.example.webviewmanipulatordemo;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.view.Menu;
import android.webkit.WebResourceResponse;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.webkit.WebChromeClient;
public class MainActivity extends Activity {
public boolean registerFormLoaded = false;
public WebView webView;
@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView) findViewById( R.id.webView );
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webView.setBackgroundColor(0x00000000);
webView.setWebViewClient( new WebViewListener() ); // when commenting this scrolling works.
webView.setWebChromeClient( new WebChromeClient() {} );
webView.loadUrl( "" );
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public class WebViewListener extends WebViewClient
{
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url)
{
if( url.contains("") ) {
registerFormLoaded = true;
webView.setWebViewClient( null );
return null;
}
if( url.contains("") && !registerFormLoaded ) {
view.loadUrl("javascript:$('#dialog').remove()");
view.loadUrl("javascript:go('login/register')");
}
return null;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
}
希望您有任何想法或猜测此应用程序中发生了什么。谢谢!
答案 0 :(得分:0)
我实际上看不到你的视频,但我认为我有同样的问题你正在描述。尝试在包含WebView的布局上设置android:descendantFocusability =“blocksDescendants”。
答案 1 :(得分:0)
好的,我明白了。我做了一些进一步登录方法
public WebResourceResponse shouldInterceptRequest( final WebView view, final String url)
我注意到javascript(出于一些奇怪的原因)继续重新加载页面。我通过
修复了这个错误if( url.contains("") && registerFormLoaded ) {
view.stopLoading();
}
在这种方法中。现在它起作用了。哦,那个人真烦人。很高兴它现在解决了。 感谢您的阅读!!