首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebViewClient将无法打开在shouldOverrideUrlLoading()中处理的页面

WebViewClient将无法打开在shouldOverrideUrlLoading()中处理的页面
EN

Stack Overflow用户
提问于 2018-08-09 18:48:41
回答 1查看 809关注 0票数 0

我正在使用webview来显示交易过程(通过creditCard支付)。如果我使用webView.load(给定网址),它可以工作,它会将我从我的应用程序重定向到我浏览器中的银行页面。

但我需要跟踪付款是否成功(它会将我重定向到特定的URL),并将数据发送回服务器。

我使用了webViewClient,但当我使用客户端时,它不会将我重定向到浏览器页面,它将永远停留在应用程序内部的“处理数据”屏幕上。即使我只添加view.loadurl(URL)并在shouldOverrideUrlLoading中返回true,它也会做同样的事情。有4-5个重定向,直到最终结果。StartURL(添加creditCardInfo) -重定向至验证-重定向至付款确认-重定向至返回数据的特定URL (如果是分支)

代码语言:javascript
复制
class PurchaseWebView: AppCompatActivity() {

private lateinit var purchaseWebView: WebView
private val api: API = API.getInstance(this)
private val webViewActivity = this

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    setContentView(R.layout.purchase_web_view_layout)

    purchaseWebView = findViewById(R.id.webview)

    @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    purchaseWebView.webViewClient = object : WebViewClient() {
        override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
            createLog("WebView Loading url... ", url)
            if (url.startsWith("purchase.complete.url.com", 0)){
                api.purchaseCreditCardResult(url, webViewActivity, object: IPurchaseCallback{
                    override fun onError(errorJSON: JSONObject) {
                        createLog("WebView Error ", errorJSON.toString())
                    }

                    override fun onSuccess(purchaseJSON: JSONObject?) {
                        createLog("WebView Success ", "Finishing Activity")
                    }
                })
                return false
            } else {
                view.loadUrl(url)
                return true
            }
        }
    }

    @RequiresApi(Build.VERSION_CODES.N)
    purchaseWebView.webViewClient = object : WebViewClient() {
        override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean {
            if (request.url.toString().startsWith("purchase.complete.url.com", 0)){

                api.purchaseCreditCardResult(request.url.toString(), webViewActivity, object: IPurchaseCallback{
                    override fun onError(errorJSON: JSONObject) {
                        createLog("WebView Error ", errorJSON.toString())
                    }

                    override fun onSuccess(purchaseJSON: JSONObject?) {
                        createLog("WebView Success ", "Finishing Activity")
                    }
                })
                return false
            } else {
                view.loadUrl(request.url.toString())
                return true
            }
        }
    }

    purchaseWebView.loadUrl(intent.extras.getString("purchaseURL"))

}
EN

回答 1

Stack Overflow用户

发布于 2018-08-09 20:52:10

我认为问题出在这个特定的view.loadUrl(request.url.toString())调用中,当你重写shouldOverrideUrlLoading时,你应该只返回truefalse,这意味着允许或禁止加载传递的url。但是当你返回true并调用loadUrl时,你会试图加载同一个url两次。删除loadUrl命令,只返回true

代码语言:javascript
复制
override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
    view.loadUrl(request.url.toString())   // Why?
    return true
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51764990

复制
相关文章

相似问题

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