首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebView回去

WebView回去
EN

Stack Overflow用户
提问于 2018-01-21 10:08:53
回答 1查看 1.2K关注 0票数 1

WebView可以在虚拟设备上返回、转发和重新加载。当我在真实的设备上测试它时,返回和转发并不是work.As用来重新加载的,它工作得很好。我知道有人问过同样的问题,但我没有为我的例子找到解决办法。

代码语言:javascript
复制
class Site : android.support.v4.app.Fragment(), OnBackPressedListener {

    var changeU: String = "https://www.google.ru/search?client=opera&q=google&sourceid=opera&ie=UTF-8&oe=UTF-8"

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
            return inflater.inflate(R.layout.site, container, false)
    }

    override fun onSaveInstanceState(outState: Bundle) {
            super.onSaveInstanceState(outState)
            webView.saveState(outState)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            setHasOptionsMenu(true)
            webView.settings.javaScriptEnabled = true
            webView.settings.cacheMode = WebSettings.LOAD_CACHE_ELSE_NETWORK
            if (savedInstanceState == null) {
                    webView.loadUrl(changeU)
            }
            webView.settings.setSupportZoom(true)
            webView.settings.builtInZoomControls = true
            webView.settings.displayZoomControls = false
            webView.webViewClient = MyWebViewClient()
            super.onViewCreated(view, savedInstanceState)
    }

    private inner class MyWebViewClient : WebViewClient() {
            override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
                    view.loadUrl(url)
                    return true
            }
    }

    override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
            inflater!!.inflate(R.menu.site_menu, menu)
            super.onCreateOptionsMenu(menu, inflater)
    }


    override fun onOptionsItemSelected(item: MenuItem): Boolean {
            when (item.itemId) {
                    R.id.backT -> {
                            if (webView.canGoBack()) {
                                    webView.goBack()
                            } else {
                            }
                            return true
                    }
                    R.id.reloadT -> {
                            webView.reload()
                            return true
                    }
                    R.id.forwardT -> {
                            if (webView.canGoForward()) {
                                    webView.goForward()
                            }
                            return true
                    }
                    else -> return super.onOptionsItemSelected(item)
            }
    }

    override fun onBackPressed() {
            if (webView.canGoBack()) {
                    webView.goBack()
            } else {
            }
    }
}

我想这是如此简单的错误,但我解决不了。

EN

回答 1

Stack Overflow用户

发布于 2018-01-21 11:56:35

Android WebView新选项卡操作urls可以通过扩展WebChromeClient.来处理。

请看一下活动课。

代码语言:javascript
复制
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.webkit.*
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    private val changeU: String = "https://www.google.ru/search?client=opera&q=google&sourceid=opera&ie=UTF-8&oe=UTF-8"


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        webView.settings.javaScriptEnabled = true
        webView.settings.cacheMode = WebSettings.LOAD_CACHE_ELSE_NETWORK
        webView.settings.setSupportZoom(true)
        webView.settings.builtInZoomControls = true
        webView.settings.displayZoomControls = false
        // add multi window support
        webView.settings.javaScriptCanOpenWindowsAutomatically = true
        webView.webViewClient = MyWebViewClient()
        webView.webChromeClient = MyWebChromeClient()

        if (savedInstanceState == null) {
            webView.loadUrl(changeU)
        }

    }

    private inner class MyWebChromeClient : WebChromeClient() {
        // handle new tab action urls if required
        override fun onShowCustomView(view: View?, callback: CustomViewCallback?) {
            super.onShowCustomView(view, callback)
        }
    }

    private inner class MyWebViewClient : WebViewClient() {
        override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
            view.loadUrl(url)
            return true
        }

        override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
            return super.shouldOverrideUrlLoading(view, request)
        }
    }
    override fun onBackPressed() {
        if (webView.canGoBack()) {
            webView.goBack()
        } else {
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48365698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档