嗨,我在twitter WebView上工作。但twitter WebView的运行并不完美。我面临一些问题,比如
-
当点击推特时,它会在新页面上打开,但在背面按下它重新加载主页,而不是加载以前加载的主页页面和滚动位置到用户点击推特的位置。
-
在搜索页面上,我无法搜索任何关键字。当我键入任何重新加载搜索页面的软键板中的字符。
代码:
public class MainActivity extends AppCompatActivity {
private WebView webView;
@SuppressLint({"JavascriptInterface", "SetJavaScriptEnabled"})
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView=findViewById(R.id.webview);
webView.getSettings().setAppCachePath(getCacheDir().getAbsolutePath());
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setAppCacheEnabled(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
webView.getSettings().setUserAgentString("Mozilla/5.0 (Linux; U; Android 2.0; en-us; Droid Build/ESD20) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17");
webView.setWebViewClient(new WebViewClient());
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.setCookie("https://twitter.com/","uniqueId=10028; Domain=.codean.app");
String cookie = cookieManager.getCookie("https://twitter.com/");
webView.loadUrl("https://twitter.com/");
}
}
-
对于现有的,您需要在背后使用flag。这里是您的示例代码
public class MainActivity extends AppCompatActivity { WebView webView; static boolean flag = true; @SuppressLint({"JavascriptInterface", "SetJavaScriptEnabled"}) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView=findViewById(R.id.web_view); webView.getSettings().setAppCachePath(getCacheDir().getAbsolutePath()); webView.getSettings().setAllowFileAccess(true); webView.getSettings().setAppCacheEnabled(true); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setDomStorageEnabled(true); webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); //webView.getSettings().setUserAgentString("Mozilla/5.0 (Linux; U; Android 2.0; en-us; Droid Build/ESD20) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17"); webView.setWebViewClient(new WebViewClient()); CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setAcceptCookie(true); cookieManager.setCookie("https://twitter.com/","uniqueId=10028; Domain=.codean.app"); String cookie = cookieManager.getCookie("https://twitter.com/"); webView.loadUrl("https://twitter.com/"); if(flag) Log.d("ONCREATE", "flag is true"); } @Override public void onBackPressed() { if (webView.canGoBack()) { webView.goBack(); Log.d("ONBACK", "CALLED" ); flag = false; } else { super.onBackPressed(); } }}
-
无法搜索关键字,这行代码创建问题,您需要删除这行代码并使其正常工作。
webView.getSettings((.setUserAgentString("Mozilla/5.0(Linux;U;Android 2.0;en-us;Droid Build/ESD20(AppleWebKit/530.17(KHTML,类似Gecko(Version/4.0 Mobile Safari/530.17"(;
1-我认为您在返回webview时所面临的问题可以像下面这样使用。
@Override
public void onBackPressed() {
if (webView.canGoBack()) {
webView.goBack();
} else {
super.onBackPressed();
}
}
2-您是否使用网络视图点击或软键完成/搜索输入法进行搜索?
当WebView覆盖URL加载时,它会自动累积访问过的网页的历史记录。您可以使用goBack()
和goForward().
在历史中前后导航
例如,下面显示了"活动"如何使用设备"后退"按钮向后导航:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// Check if the key event was the Back button and if there's history
if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
myWebView.goBack();
return true;
}
// If it wasn't the Back key or there's no web page history, bubble up to the default
// system behavior (probably exit the activity)
return super.onKeyDown(keyCode, event);
}
如果实际存在供用户访问的网页历史记录,则canGoBack()
方法返回true。同样,您可以使用canGoForward()
来检查是否存在正向历史。如果不执行此检查,那么一旦用户到达历史记录的末尾,goBack()
或goForward()
将不执行任何操作。