这段关于 url 的代码在 webview 中的位置是啥?

Posted

技术标签:

【中文标题】这段关于 url 的代码在 webview 中的位置是啥?【英文标题】:What's the place of this code about urls in webview?这段关于 url 的代码在 webview 中的位置是什么? 【发布时间】:2012-07-14 17:28:29 【问题描述】:

我想将此代码添加到我的 java 文件中:

webView.setWebViewClient(new WebViewClient()
   public boolean shouldOverrideUrlLoading(WebView view, String url) 
       if (url != null && url.startsWith("http://")) 
           view.getContext().startActivity(
               new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
           return true;
        else 
           return false;
       
   

但我不知道在哪里。这是我的java文件: 包sherdle.donald.duck.app; 导入android.app.Activity; 导入android.os.Bundle; 导入android.view.Window; 导入 android.webkit.WebChromeClient; 导入 android.webkit.WebView; 导入 android.webkit.WebViewClient; 公共类 WebPageLoader 扩展了 Activity WebView webview;

final Activity activity = this;

@Override
public void onCreate(Bundle savedInstanceState)

super.onCreate(savedInstanceState);
this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.main);
webview = (WebView) findViewById(R.id.webview);
webview.getSettings().setjavascriptEnabled(true);
webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webview.getSettings().setSupportMultipleWindows(true);
webview.getSettings().setPluginsEnabled(true);

webview.setWebChromeClient(new WebChromeClient() 
    public void onProgressChanged(WebView view, int progress)
    
        activity.setTitle("Loading...");
        activity.setProgress(progress * 100);

        if(progress == 100)
            activity.setTitle(R.string.app_name);
    
 );

 webview.setWebViewClient(new WebViewClient() 


    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url)
    
        view.loadUrl(url);
        return true;

    
   );



 webview.loadUrl("http://www.sherdle.com/apphosting/dd");
 

 @Override
 public void onBackPressed ()
    if(webview.canGoBack()) webview.goBack();
    else super.onBackPressed();
 
 

我是 android 新手,我所做的每一件事都需要很多帮助。感谢您的帮助。

我现在已经有了这个: 包sherdle.donald.duck.app; 导入android.app.Activity; 导入android.os.Bundle; 导入android.view.Window; 导入 android.webkit.WebChromeClient; 导入 android.webkit.WebView; 导入 android.webkit.WebViewClient; 公共类 WebPageLoader 扩展了 Activity WebView webview;

final Activity activity = this;

@Override
public void onCreate(Bundle savedInstanceState)

super.onCreate(savedInstanceState);
this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.main);
webview = (WebView) findViewById(R.id.webview);
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webview.getSettings().setSupportMultipleWindows(true);
webview.getSettings().setPluginsEnabled(true);

 webview.setWebChromeClient(new WebChromeClient() 
    public void onProgressChanged(WebView view, int progress)
    
        activity.setTitle("Loading...");
        activity.setProgress(progress * 100);

        if(progress == 100)
            activity.setTitle(R.string.app_name);
    
 );



 webview.setWebViewClient(new WebViewClient() 


    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url)
    
        view.loadUrl(url);
        return true;

    
 );

 webview.setWebChromeClient(new WebChromeClient()
   public boolean shouldOverrideUrlLoading(WebView view, String url) 
       if (url != null && url.startsWith("http://")) 
           view.getContext().startActivity(
               new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
           return true;
        else 
           return false;
       
   

  webview.loadUrl("http://www.sherdle.com/apphosting/dd");
  



 @Override
 public void onBackPressed ()
    if(webview.canGoBack()) webview.goBack();
    else super.onBackPressed();
 
 

但我的 LoadUrl 行出现此错误: 此行有多个标记 - 语法错误,插入“AssignmentOperator Expression”完成 表达 - 语法错误,插入“;”完成 FieldDeclaration - 语法错误,插入“)”完成MethodInvocation - 语法错误,插入“”完成ClassBody - 语法错误,插入“;”完成声明 - 标记的语法错误,错误的构造

【问题讨论】:

【参考方案1】:

这样使用

    @Override
public void onCreate(Bundle savedInstanceState)

super.onCreate(savedInstanceState);
this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.main);
webview = (WebView) findViewById(R.id.webview);
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webview.getSettings().setSupportMultipleWindows(true);
webview.getSettings().setPluginsEnabled(true);

 webview.setWebChromeClient(new WebChromeClient() 
    public void onProgressChanged(WebView view, int progress)
    
        activity.setTitle("Loading...");
        activity.setProgress(progress * 100);

        if(progress == 100)
            activity.setTitle(R.string.app_name);
    
 );



 webview.setWebViewClient(new WebViewClient() 


    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url)
    
        view.loadUrl(url);
        return true;

    
 );

 webview.setWebChromeClient(new WebChromeClient()
   public boolean shouldOverrideUrlLoading(WebView view, String url) 
       if (url != null && url.startsWith("http://")) 
           view.getContext().startActivity(
               new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
           return true;
        else 
           return false;
       
   


  );

webview.loadUrl("http://www.sherdle.com/apphosting/dd");


 

 @Override
 public void onBackPressed ()
    if(webview.canGoBack()) webview.goBack();
    else super.onBackPressed();
 

【讨论】:

这个应该是这样的public class yourActivity extends Activity above code 我仍然收到错误:此行有多个标记 - 上下文类型中的方法 startActivity(Intent) 不适用于参数 (Intent) - 行断点:WebPageLoader [行:54] - shouldOverrideUrlLoading (WebView, String) 以及:此行的多个标记 - Intent 无法解析为变量 - Uri 无法解析 - Intent 无法解析为类型 它工作!谢谢!我还有一个问题:如果我想添加更多,那么一个 url 以...开头...如何? 一个以上的 URL 是什么意思?你能解释一下吗?最好将它作为一个单独的问题发布。并接受答案,以便完成此问题..【参考方案2】:

首先确保您的布局中有 webview。还要确保清单中有以下行。

<uses-permission android:name="android.permission.INTERNET" />

然后你将它添加到你的 onCreate 中。它可能不是最好的,但已经足够了。

【讨论】:

是的,我已经连接到互联网,并且我的 webview 已经可以正常工作了。但是我的 OneCreate 到底在哪里?你能把代码复制到我的java文件中吗?感谢您的帮助。【参考方案3】:

抱歉,如果你已经重写了完全相同的方法,你怎么会不明白在哪里插入那段代码呢?看看它在哪里写的:

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)

    view.loadUrl(url);
    return true;

如果你想改变上面的行为,只需替换第一个代码sn-p中指定的这两行即可。

我感觉你并不真正理解 anonynous inner classes,因为你还尝试设置 WebChromeClient 两次 - 这真的没有意义。我建议你阅读一下这件事。

此外,shouldOverrideUrlLoading(...) 方法由 WebViewClient 定义,而不是 WebChromeClient。这是一个简单查阅文档的案例。

【讨论】:

以上是关于这段关于 url 的代码在 webview 中的位置是啥?的主要内容,如果未能解决你的问题,请参考以下文章

android 关于WebView点击图片展示大图

android 关于WebView点击图片展示大图

如何在android webview中播放视频URL

如何在 WebView App 中的 URL 点击设置插页式广告?

如何在iOS中的WebView中打开URL?

Youtube 嵌入视频在 webview 中不起作用。这段代码有啥问题?