Android Webview в фрагменте сохраняет старые заголовки JavaScript, несмотря на очистку кэша и новое тело данныхAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Android Webview в фрагменте сохраняет старые заголовки JavaScript, несмотря на очистку кэша и новое тело данных

Сообщение Anonymous »

У меня есть чат-ботвеффрагмент в моем приложении Android, которое загружает веб-бот. Мне нужно передать различную информацию о заголовке в чат-бот через JavaScript, основанный на том, находится ли пользователь в предварительном или пост-логиновом состоянии. Проблема заключается в том, что WebView, похоже, использует информацию о несвежнем заголовке из предыдущих взаимодействий, даже после того, как я пытаюсь очистить кэши и явно отправлять новые данные заголовка. Путешествие перед логином:
  • Перейдите к Chatbotwebfragment.
  • call senddatatochatbot (isfromonboarding = true) (где есть Isfromonboding, указывает на Pre-login). /> ожидаемый и актуальный: чат-бот загружает правильный экран до логинов. < /p>
    < /li>
    < /ul>
    2. Пользователь входит в систему (за пределами фрагмента), затем перейти обратно в ChatbotwebFragment (пост-логин): < /strong> < /p>

    Перейдите к чат-ботвейбфрагменту снова. Состояние пост-логин с различными значениями заголовка).
  • Ожидается: чат-бот загружает экран пост-логин, используя новые заголовки. /> < /ul>
    3. Верните и снова обратитесь к чат-ботвебфрагменту (все еще пост-логин): < /strong> < /p>

    Перейдите к чатботвебфрагменту в третий раз. < /Li>
    Call Sendatatochatbot (isfromonboard = false). экран. Похоже, что вторая попытка загрузить с помощью заголовков с пост-логинами не может обновить то, что использует WebView, но последующая попытка с теми же заголовками пост-логин затем работает. Соответствующий код из чатботвебфрагмента.kt:
// Упрощенное для краткости - предположим, что Apppreference и другие константы определены
class ChatBotWebFragment : Fragment() {

private lateinit var binding: FragmentChatbotWebviewBinding // Assuming ViewBinding
private var isFromOnBoarding: Boolean = false

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
isFromOnBoarding = arguments?.getBoolean(Constants.IS_FROM_ONBOARDING, false) ?: false
initWebView()
binding.webView.loadUrl("CHAT_BOT_URL")
}

private fun initWebView() {
binding.webView.apply {
// ... other WebView settings (JS enabled, etc.)
settings.cacheMode = WebSettings.LOAD_NO_CACHE // Attempting to disable cache
clearCache(true)
clearHistory()
CookieManager.getInstance().removeAllCookies(null)
CookieManager.getInstance().flush()

webViewClient = object : WebViewClient() {
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
Log.d("ChatBotWebFragment", "PageFinished: isFromOnBoarding = $isFromOnBoarding")
sendDataTOChatBot(isFromOnBoarding)
}

// ... other WebViewClient methods (shouldOverrideUrlLoading, onReceivedError etc.)
}
// ... webChromeClient setup
}
}

private fun sendDataTOChatBot(isUserOnBoarding: Boolean) {
val headerJsonObject = JSONObject()
try {
// Simplified: Actual values come from AppPreference
if (isUserOnBoarding) {
Log.d("ChatBotWebFragment", "Sending PRE-LOGIN headers")
headerJsonObject.put("is_logged_in", false)
// ... other pre-login specific headers
} else {
Log.d("ChatBotWebFragment", "Sending POST-LOGIN headers")
headerJsonObject.put("Authorization","access token")
headerJsonObject.put("is_logged_in", true)
// ... other post-login specific headers
}

} catch (e: JSONException) {
e.printStackTrace()
}

// The JavaScript that dispatches the event with header details
val javascriptCode = """
var event = new CustomEvent("androidHeaders", { detail : $headerJsonObject});
window.dispatchEvent(event);
// console.log("Dispatched androidHeaders with:", $headerJsonObject); // For web debugging
""".trimIndent()

Log.d("ChatBotWebFragment", "Executing JS: $javascriptCode")
binding.webView.evaluateJavascript(javascriptCode, null)
}
}


Подробнее здесь: https://stackoverflow.com/questions/796 ... earing-cac
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»