package com.shsening.autouploadvideos import CookieHelper import android.content.Context import android.os.Handler import android.os.Looper import android.text.TextUtils import android.util.AttributeSet import android.util.Log import android.webkit.CookieManager import android.webkit.CookieSyncManager import android.webkit.WebSettings import android.webkit.WebView import android.widget.Toast class SessionProfileWebView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyle: Int = 0 ) : WebView(context, attrs, defStyle) { init { settings.javaScriptEnabled = true settings.userAgentString = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" settings.javaScriptEnabled = true settings.domStorageEnabled = true settings.databaseEnabled = true settings.setSupportZoom(true) settings.builtInZoomControls = true settings.displayZoomControls = false settings.allowFileAccess = true settings.textZoom = 50 // Set zoom level to 30% settings.useWideViewPort = true settings.loadWithOverviewMode = true settings.layoutAlgorithm = WebSettings.LayoutAlgorithm.NORMAL CookieManager.getInstance().setAcceptCookie(true) // 接受 Cookie CookieManager.getInstance().setAcceptThirdPartyCookies(this, true) // 接受第三方 Cookie settings.setCacheMode(WebSettings.LOAD_NO_CACHE) } // 加载 SessionProfile 的所有 URL-Cookie 映射到 WebView fun loadSessionProfileCookies(sessionProfileId: String) { //CookieHelper.removeCookieForAllPlatform() CookieManager.getInstance().removeAllCookies(null) CookieManager.getInstance().flush() val sessionCookies = CookieHelper.getAllSessionProfileCookies(context, sessionProfileId) println("这是session cookie"+sessionCookies) for ((url, cookies) in sessionCookies) { splitCookieStringAndSetCookie(url,cookies) } } private fun splitCookieStringAndSetCookie(url:String,cookies:String){ val cookie_part = cookies.split(";".toRegex()).dropLastWhile { it.isEmpty() } .toTypedArray() val cookieManager = CookieManager.getInstance() if (cookie_part!=null) { for (cook in cookie_part) { //一定要一个一个set, 如果是拼接的话,设置不成功。 //cookieManager.setCookie(url, cook.trim{ it <= ' ' }) cookieManager.setCookie(url, cook.trim()) } } cookieManager.flush() } // 访问某个 URL 时,保存当前 SessionProfile 的 Cookie fun saveCurrentSessionProfileUrlCookies(sessionProfileId:String, url: String) { val cookieManager = CookieManager.getInstance() val cookies = cookieManager.getCookie(url) if (cookies != null) { CookieHelper.saveSessionProfileUrlCookies(context, sessionProfileId, url) } } override fun loadUrl(url: String) { try{ val headers = mapOf( "pragma" to "no-cache", "priority" to "u=0, i", "sec-ch-ua" to "\"Google Chrome\";v=\"131\", \"Chromium\";v=\"131\", \"Not_A Brand\";v=\"24\"", "sec-ch-ua-mobile" to "?0", "sec-ch-ua-platform" to "\"Windows\"", "sec-fetch-dest" to "document", "sec-fetch-mode" to "navigate", "sec-fetch-site" to "none", "sec-fetch-user" to "?1", "upgrade-insecure-requests" to "1" ) super.loadUrl(url,headers) }catch (e:Exception){ e.printStackTrace() } } fun loadUrlNoCache(url: String) { try{ val headers = mapOf( "pragma" to "no-cache", "priority" to "u=0, i", "sec-ch-ua" to "\"Google Chrome\";v=\"131\", \"Chromium\";v=\"131\", \"Not_A Brand\";v=\"24\"", "sec-ch-ua-mobile" to "?0", "sec-ch-ua-platform" to "\"Windows\"", "sec-fetch-dest" to "document", "sec-fetch-mode" to "navigate", "sec-fetch-site" to "none", "sec-fetch-user" to "?1", "upgrade-insecure-requests" to "1" ) super.clearCache(true) super.loadUrl(url,headers) }catch (e:Exception){ e.printStackTrace() } } }