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)
|
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()
|
}
|
}
|
|
}
|