当前位置: 首页 > news >正文

如何做百度网站seo网站推广培训

如何做百度网站,seo网站推广培训,专门做简历的网站,服务器上给网站做301跳转文章目录 前言开发环境问题描述问题分析解决方案最后 前言 最近维护一个老项目时遇到的问题。说起这老项目我就有点头疼,一个快十年前的项目,这么说你可能不觉得有什么,但是你想想Swift也才发布不到十年(2014年6月发布&#xff0…

文章目录

  • 前言
  • 开发环境
  • 问题描述
  • 问题分析
  • 解决方案
  • 最后


前言

最近维护一个老项目时遇到的问题。说起这老项目我就有点头疼,一个快十年前的项目,这么说你可能不觉得有什么,但是你想想Swift也才发布不到十年(2014年6月发布,现2023年12月)。

开发环境

  • Xcode: 15.1
  • iOS: 17.2

问题描述

项目运行在iOS 17.2设备时,应用内网页无法成功获取设置后的UserAgent

项目中设置UserAgent的关键源码:

[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}];
}];

问题分析

从项目源码看,设置UserAgent是通过NSUserDefaults实现的。大致操作如下:

  1. 首先应用启动后创建一个WKWebView实例对象,无需加载任何网页
  2. 然后通过navigator.userAgent获取当前的UserAgent并修改
  3. 接着调用registerDefaults方法将修改后的UserAgent注册到NSUserDefaults,成为应用的默认设置
  4. 最后销毁该WKWebView实例对象

经过以上操作,后续创建WKWebView实例对象时都能从NSUserDefaults中获取到修改后的UserAgent用于初始化,从而实现全局设置。需要注意一点,registerDefaults方法设置默认值的操作不会进行持久化存储,所以应用每次启动都需要设置一遍。

虽然理了一遍设置逻辑感觉没什么问题,但是这个方法有点老了,现在一般通过customUserAgent属性设置,难道这个方法过时了?

为了排除其他可能存在的干扰,新建一个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初始化前设置UserAgentUserDefaults.standard.register(defaults: ["UserAgent": "App/1.0.0"])// 创建WKWebViewlet webViewConfiguration = WKWebViewConfiguration()webView = WKWebView(frame: view.bounds, configuration: webViewConfiguration)webView.navigationDelegate = selfview.addSubview(webView)// 加载HTMLwebView.loadHTMLString(htmlString, baseURL: nil)}
}

iOS 17.2测试结果:

screenshot1

iOS 16.4测试结果:

screenshot2

实测iOS 17.0和iOS 17.2测试结果一样,现在可以确定从iOS 17开始,通过NSUserDefaults设置UserAgent都无法生效。初步判断,这个设置方法在iOS 17及以上过时了,个人猜测可能是WKWebView初始化时不再从NSUserDefaults获取默认值导致的(今天天太冷了,实在扛不住,后面有机会再翻翻相关源码尝试验证猜测)。

既然这个方法失效了,那在iOS 17上通过customUserAgent属性设置能正常生效吗?

对前面的测试源码做简单修改,页面加载完成后自动获取一次未修改的UserAgent,然后再修改UserAgent并通过customUserAgent属性设置,接着手动点击按钮获取一次UserAgent,最后对比两次获取结果判断是否设置成功。

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()// 创建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!) {// 获取当前的UserAgentwebView.evaluateJavaScript("navigator.userAgent") { (result, error) inguard let userAgent = result as? String else {return}let newUserAgent = userAgent + " App/1.0.0"// 设置UserAgentwebView.customUserAgent = newUserAgent}}
}

测试结果:

screenshot3

从测试结果看,通过customUserAgent属性设置UserAgent一切正常。不过这种方法不好实现全局设置,每次创建新的WKWebView实例对象都需要再设置一遍。

解决方案

通过NSUserDefaults设置UserAgent改为通过customUserAgent属性设置UserAgent,更多详情请参考前面的问题分析。

最后

如果这篇文章对你有所帮助,点赞👍收藏🌟支持一下吧,谢谢~


本篇文章由@crasowas发布于CSDN。

http://www.khdw.cn/news/46212.html

相关文章:

  • 做微商如何引流推广?怎么找客源?汕头网站排名优化
  • 手机网站开发教程产品推广文案怎么写
  • 网站seo公司哪家专业南京seo公司排名
  • 廊坊百度推广公司地址seo排名推广
  • 济南专业网站托管公司百度收录要多久
  • 做原型网站网站推广的基本方法为
  • 如何提高 网站的点击量百度搜索量统计
  • 网站开发栏目需求1央视新闻最新消息今天
  • 网站做的和别人一样违法吗搜索引擎营销的特点
  • 做音乐 交流网站深圳谷歌网络推广公司
  • 网站开发哪个更专业天津网络关键词排名
  • 单位建设网站河北网站建设案例
  • 做网站 怎么样找客户北京百度网站排名优化
  • 网站开发的认知seo培训费用
  • 做seo是要先有网站吗怎么给客户推广自己的产品
  • 淘宝网站做推广收费吗营销策划咨询
  • 内江网站怎么做seo金华百度推广公司
  • 衡水做网站找谁万网域名管理入口
  • 免费申请移动手机卡广州网站排名优化报价
  • 怎么用外网校内网站做英语汕头网站建设方案优化
  • 西宁网站建设高端一键生成网站
  • 做网站怎样赚钱站长工具域名查询社区
  • 建站素材网百度关键词流量查询
  • 旅游网站建设方案公司营销网站建设
  • 深圳福田房价网站网络排名优化方法
  • python做的网站如何部署成都百度推广联系方式
  • 东莞市网络策划推广哪家好长春seo公司哪家好
  • 政府网站页面设计排名前十的小说
  • 我想建个网站seo网站排名优化工具
  • 怎么制作网站详细教程视频哪里有专业的培训机构