Вот переименование некоторых других так называемых ответов «cop out». Бывают ситуации, когда простое отбрасывание неприятных символов / строк является хорошим решением, несмотря на протесты, озвученные здесь.
def safeStr(obj):
try: return str(obj)
except UnicodeEncodeError:
return obj.encode('ascii', 'ignore').decode('ascii')
except: return ""
Тестирование:
if __name__ == '__main__':
print safeStr( 1 )
print safeStr( "test" )
print u'98\xb0'
print safeStr( u'98\xb0' )
Результаты:
1
test
98°
98
Предложение: вместо этого вы можете назвать эту функцию toAscii
? Это вопрос предпочтения.
Вы должны настроить webViewClient для вашего webView.
Образец:
this.mWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url){
view.loadUrl(url);
return true;
}
});
Вам необходимо настроить WebViewClient, чтобы переопределить это поведение (открытие ссылок с помощью веб-браузера). Очевидно, вы объявили свой WebView, но затем настроили WebViewClient следующим образом:
WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.setWebViewClient(new WebViewClient());
Затем вам нужно определить свой WebViewClient ():
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (Uri.parse(url).getHost().equals("www.example.com")) {
// Designate Urls that you want to load in WebView still.
return false;
}
// Otherwise, give the default behavior (open in browser)
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
}
Затем запустите ваш WebViewClient:
WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.setWebViewClient(new MyWebViewClient());
Я столкнулся с той же проблемой, и я просто исправил ее, добавив одну строку.
webview.setWebViewClient(new WebViewClient());
и это решило мою проблему.
Вы всегда можете открыть URL-адрес в веб-просмотре, используя это:
@Override
public void onCreate(Bundle savedInstanceState) {
webview.setWebViewClient(new MyWebViewClient());
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setPluginsEnabled(true);
}
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onLoadResource(WebView view, String url){
}
}
Вам необходимо вызвать wvBikeSite.setWebViewClient, например:
MyWebViewClient wvc = new MyWebViewClient();
wvBikeSite.setWebViewClient(wvc);
Где MyWebViewClient переопределяет shouldOverrideUrlLoading, а именно:
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
Мне это понравилось, и он отлично работает.
mWebView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url != null && url.startsWith("http://")) {
mWebView.loadUrl(url);
return true;
} else {
return false;
}
}
});
Большая часть ответа верна, но обратите внимание, что: SupportMultipleWindows должно быть установлено как ложное.
mWebView.getSettings().setSupportMultipleWindows(false);
и теперь установите webViewClint и получите загрузочный URL.
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url){
Log.d(TAG,"URL: "+url);
view.loadUrl(url);
/**
* if you wanna open outside of app
if (url != null && url.startsWith(URL)) {
view.loadUrl(url);
return false;
}
// Otherwise, give the default behavior (open in browser)
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);**/
return true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
@Override
public void onLoadResource(WebView view, String url) {
super.onLoadResource(view, url);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
});
webview.setWebViewClient(new WebViewClient());
webview.loadUrl(url);
Установить клиент веб-просмотра.
Попробуйте этот, этот метод устарел.
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
return super.shouldOverrideUrlLoading(view, request);
}
Вот мой код, как решить вышеуказанную проблему (при нажатии на ссылку запрашивается браузер по умолчанию, чтобы открыть ссылку)
import android.os.Bundle;import android.annotation.SuppressLint;import android.app.Activity;
import android.view.Menu;import android.webkit.WebChromeClient;
import android.webkit.WebView;public class MainActivity extends Activity{
`@SuppressLint("SetJavaScriptEnabled")@Override protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);String url="http://google.com";WebView Webview=(WebView) this.findViewById(R.id.webView1); Webview.getSettings().setJavaScriptEnabled(true);Webview.loadUrl(url);}@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;}`}
Используйте этот код:
// Force links and redirects to open in the WebView instead of in a browser
mWebView.setWebViewClient(new WebViewClient());
Это откроет любую конкретную ссылку только в вашем приложении ...
WebView web;
web = (WebView) findViewById(R.id.web);
web.setWebViewClient(new WebViewClient(){
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
// TODO Auto-generated method stub
super.onPageStarted(view, url, favicon);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url != null && url.startsWith("http://www.xplorerstrick.net")) {
view.loadUrl(url);
progDailog.show();
return true;
}
else {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
}
}