wangrong
2024-12-10 9d5a2a788bedb68e99c080ed77e7e0e5051e90d4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
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()
        }
    }
 
}