中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

岳陽網(wǎng)站開發(fā)商城網(wǎng)絡(luò)推廣項目計劃書

岳陽網(wǎng)站開發(fā)商城,網(wǎng)絡(luò)推廣項目計劃書,wordpress泛域名解析,dede可以做商城網(wǎng)站嗎文章目錄 前言開發(fā)環(huán)境問題描述問題分析解決方案最后 前言 最近維護一個老項目時遇到的問題。說起這老項目我就有點頭疼,一個快十年前的項目,這么說你可能不覺得有什么,但是你想想Swift也才發(fā)布不到十年(2014年6月發(fā)布&#xff0…

文章目錄

  • 前言
  • 開發(fā)環(huán)境
  • 問題描述
  • 問題分析
  • 解決方案
  • 最后


前言

最近維護一個老項目時遇到的問題。說起這老項目我就有點頭疼,一個快十年前的項目,這么說你可能不覺得有什么,但是你想想Swift也才發(fā)布不到十年(2014年6月發(fā)布,現(xiàn)2023年12月)。

開發(fā)環(huán)境

  • Xcode: 15.1
  • iOS: 17.2

問題描述

項目運行在iOS 17.2設(shè)備時,應(yīng)用內(nèi)網(wǎng)頁無法成功獲取設(shè)置后的UserAgent。

項目中設(shè)置UserAgent的關(guān)鍵源碼:

[self.webView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id result, NSError *error) {NSString *userAgent = [NSString stringWithFormat:@"%@", result];NSString *newUserAgent = [userAgent stringByAppendingString:@" App/1.0.0"];[[NSUserDefaults standardUserDefaults] registerDefaults:@{@"UserAgent": newUserAgent}];
}];

問題分析

從項目源碼看,設(shè)置UserAgent是通過NSUserDefaults實現(xiàn)的。大致操作如下:

  1. 首先應(yīng)用啟動后創(chuàng)建一個WKWebView實例對象,無需加載任何網(wǎng)頁
  2. 然后通過navigator.userAgent獲取當(dāng)前的UserAgent并修改
  3. 接著調(diào)用registerDefaults方法將修改后的UserAgent注冊到NSUserDefaults,成為應(yīng)用的默認(rèn)設(shè)置
  4. 最后銷毀該WKWebView實例對象

經(jīng)過以上操作,后續(xù)創(chuàng)建WKWebView實例對象時都能從NSUserDefaults中獲取到修改后的UserAgent用于初始化,從而實現(xiàn)全局設(shè)置。需要注意一點,registerDefaults方法設(shè)置默認(rèn)值的操作不會進(jìn)行持久化存儲,所以應(yīng)用每次啟動都需要設(shè)置一遍。

雖然理了一遍設(shè)置邏輯感覺沒什么問題,但是這個方法有點老了,現(xiàn)在一般通過customUserAgent屬性設(shè)置,難道這個方法過時了?

為了排除其他可能存在的干擾,新建一個iOS項目用于測試,源碼如下:

import UIKit
import WebKitclass ViewController: UIViewController, WKNavigationDelegate {private let htmlString = """<html><head><meta name="viewport" content="width=device-width"><style>button {font-size: 24px;}</style><script>function getUserAgent() {var userAgent = navigator.userAgent;var paragraph = document.createElement('p');paragraph.textContent = 'UserAgent: ' + userAgent;document.body.appendChild(paragraph);}</script></head><body style="text-align: center;"><button οnclick="getUserAgent()">獲取 UserAgent</button></body></html>"""private var webView: WKWebView!override func viewDidLoad() {super.viewDidLoad()// 在WKWebView初始化前設(shè)置UserAgentUserDefaults.standard.register(defaults: ["UserAgent": "App/1.0.0"])// 創(chuàng)建WKWebViewlet webViewConfiguration = WKWebViewConfiguration()webView = WKWebView(frame: view.bounds, configuration: webViewConfiguration)webView.navigationDelegate = selfview.addSubview(webView)// 加載HTMLwebView.loadHTMLString(htmlString, baseURL: nil)}
}

iOS 17.2測試結(jié)果:

screenshot1

iOS 16.4測試結(jié)果:

screenshot2

實測iOS 17.0和iOS 17.2測試結(jié)果一樣,現(xiàn)在可以確定從iOS 17開始,通過NSUserDefaults設(shè)置UserAgent都無法生效。初步判斷,這個設(shè)置方法在iOS 17及以上過時了,個人猜測可能是WKWebView初始化時不再從NSUserDefaults獲取默認(rèn)值導(dǎo)致的(今天天太冷了,實在扛不住,后面有機會再翻翻相關(guān)源碼嘗試驗證猜測)。

既然這個方法失效了,那在iOS 17上通過customUserAgent屬性設(shè)置能正常生效嗎?

對前面的測試源碼做簡單修改,頁面加載完成后自動獲取一次未修改的UserAgent,然后再修改UserAgent并通過customUserAgent屬性設(shè)置,接著手動點擊按鈕獲取一次UserAgent,最后對比兩次獲取結(jié)果判斷是否設(shè)置成功。

import UIKit
import WebKitclass ViewController: UIViewController, WKNavigationDelegate {private let htmlString = """<html><head><meta name="viewport" content="width=device-width"><style>button {font-size: 24px;}</style><script>function getUserAgent() {var userAgent = navigator.userAgent;var paragraph = document.createElement('p');paragraph.textContent = 'UserAgent: ' + userAgent;document.body.appendChild(paragraph);}/* 頁面加載完成后獲取一次UserAgent */window.onload = function() {getUserAgent();};</script></head><body style="text-align: center;"><button οnclick="getUserAgent()">獲取 UserAgent</button></body></html>"""private var webView: WKWebView!override func viewDidLoad() {super.viewDidLoad()// 創(chuàng)建WKWebViewlet webViewConfiguration = WKWebViewConfiguration()webView = WKWebView(frame: view.bounds, configuration: webViewConfiguration)webView.navigationDelegate = selfview.addSubview(webView)// 加載HTMLwebView.loadHTMLString(htmlString, baseURL: nil)}func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {// 獲取當(dāng)前的UserAgentwebView.evaluateJavaScript("navigator.userAgent") { (result, error) inguard let userAgent = result as? String else {return}let newUserAgent = userAgent + " App/1.0.0"// 設(shè)置UserAgentwebView.customUserAgent = newUserAgent}}
}

測試結(jié)果:

screenshot3

從測試結(jié)果看,通過customUserAgent屬性設(shè)置UserAgent一切正常。不過這種方法不好實現(xiàn)全局設(shè)置,每次創(chuàng)建新的WKWebView實例對象都需要再設(shè)置一遍。

解決方案

通過NSUserDefaults設(shè)置UserAgent改為通過customUserAgent屬性設(shè)置UserAgent,更多詳情請參考前面的問題分析。

最后

如果這篇文章對你有所幫助,點贊👍收藏🌟支持一下吧,謝謝~


本篇文章由@crasowas發(fā)布于CSDN。

http://www.risenshineclean.com/news/914.html

相關(guān)文章:

  • 校園網(wǎng)站建設(shè)模板上海網(wǎng)站排名seo公司哪家好
  • 做網(wǎng)站賭博代理違法嗎品牌推廣是做什么的
  • 做營銷網(wǎng)站制作seo綜合查詢是什么意思
  • 企業(yè)網(wǎng)站怎么做畢業(yè)設(shè)計網(wǎng)站怎么營銷推廣
  • b2b平臺有哪些類別網(wǎng)絡(luò)營銷優(yōu)化
  • 做免費網(wǎng)站教程國vs百度seo排名優(yōu)化軟件化
  • 萊蕪二手房網(wǎng)湖南seo優(yōu)化報價
  • wordpress顯示輪播圖深圳市seo上詞多少錢
  • 網(wǎng)絡(luò)投注網(wǎng)站是怎么建設(shè)簡述網(wǎng)絡(luò)營銷的概念
  • 可以免費開店的平臺windows11優(yōu)化大師
  • 網(wǎng)站動態(tài)小圖標(biāo)青島網(wǎng)絡(luò)seo公司
  • 日本中古手表網(wǎng)站申請網(wǎng)站怎么申請
  • 襄陽做網(wǎng)站哪家好b2b平臺有哪些
  • 電子商務(wù)網(wǎng)站開發(fā)的基本流程軟文營銷的特點有哪些
  • 深圳 建設(shè)銀行國際互聯(lián)網(wǎng)站網(wǎng)絡(luò)推廣公司排名
  • 這幾年做網(wǎng)站怎么樣百度搜索風(fēng)云榜排行榜
  • 東莞網(wǎng)站設(shè)計報價天津百度網(wǎng)站排名優(yōu)化
  • 有哪些網(wǎng)站可以做淘寶客搜索seo怎么優(yōu)化
  • 搭建服務(wù)器做網(wǎng)站公司如何在百度宣傳
  • 9uu域名更新自動轉(zhuǎn)跳seo怎么優(yōu)化步驟
  • 湖南省住房和城鄉(xiāng)建設(shè)網(wǎng)站網(wǎng)絡(luò)seo推廣培訓(xùn)
  • 網(wǎng)頁版的游戲百度推廣優(yōu)化師
  • wordpress聯(lián)系表單插件seo整體優(yōu)化步驟怎么寫
  • 鄭州專業(yè)做淘寶網(wǎng)站推廣蘇州疫情最新消息
  • 做招聘網(wǎng)站的客戶想退錢網(wǎng)站seo快速排名優(yōu)化
  • 做京東網(wǎng)站需要哪些手續(xù)參考網(wǎng)是合法網(wǎng)站嗎?
  • 免費發(fā)布推廣信息軟件搜索引擎優(yōu)化工作
  • dedecms網(wǎng)站太原seo快速排名怎么樣
  • 公司做網(wǎng)站價格足球比賽今日最新推薦
  • 網(wǎng)站建設(shè)地域名螺螄粉的軟文推廣