如何在 UIWebView 加载其初始请求之前设置本地存储?

2023-12-09

视图控制器

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let wv = UIWebView(frame: UIScreen.main.bounds)
        wv.stringByEvaluatingJavaScript(from: "localStorage.setItem('key', 'value')")
        wv.loadRequest(URLRequest(url: URL(string: "http://localhost:63343/test.html")!))
        self.view.addSubview(wv)
        // Do any additional setup after loading the view, typically from a nib.
    }
}

测试.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        alert(localStorage.getItem("key"))
    </script>
</head>
<body>
</body>
</html>

我打了电话localStorage.setItem('key', 'value') before loadRequest。我希望警报会输出value,但它输出了null:

enter image description here

所以我的问题是:

在之前设置本地存储的正确方法是什么UIWebView加载其初始请求?

EDIT:

感谢 @Wez 指出我应该评估 JavaScriptwebViewDidFinishLoad,但我想做的是在加载该页面之前设置 localStorage(我们将在其初始请求中使用该 localStorage)。所以我无法在 webViewDidFinishLoad 中评估它...

有什么办法可以实现这一点吗?


如果您正在寻找Swift版本:

let configuration = WKWebViewConfiguration()
let contentController = WKUserContentController()
let js = "javascript: localStorage.setItem('key', 'value')"
let userScript = WKUserScript(source: js, injectionTime: WKUserScriptInjectionTime.atDocumentStart, forMainFrameOnly: false)
contentController.addUserScript(userScript)
configuration.userContentController = contentController

let webview = WKWebView(configuration: configuration)
webview.load(URLRequest(url: URL(string: "your URL")))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 UIWebView 加载其初始请求之前设置本地存储? 的相关文章

  • iPad 的自适应布局

    我正在关注这篇文章在 ios 中构建自适应布局为 iOS 8 构建自适应用户界面 http www sitepoint com building adaptive user interfaces ios 8 它在 iPhone 上运行良好
  • 查找 NSString 中子字符串的所有位置(不仅仅是第一个)

    有一个子串在字符串中出现多次 我用rangeOfString 不过好像只能找到第一个位置 如何找到子字符串的所有位置 NSString subString1 NSString subString2 n NSRange range1 newr
  • 如何在 iOS 11 上的 Swift 中获取 FLAC 文件元数据?

    我需要获取 FLAC 文件的元数据 我尝试了以下代码 let item AVPlayerItem url URL fileURLWithPath path let commonMetadata item asset commonMetada
  • 在 Swift 3 中打印

    我想知道这两种在 Swift 中打印对象的方法有什么不同 结果看起来是一样的 var myName String yohoo print My name is myName print My name is myName 功能上几乎没有区别
  • ScrollView 内的 SwiftUI 列表

    我想将列表放在 ScrollView 中 以便可以一起滚动列表行和标题 但我发现 ScrollView 中的 List 不起作用 它什么也没显示 我应该同时使用它们 我应该使用 ScrollView 这样当我滚动行时 我可以使标题 图像或文
  • 如何获取 UIImage 的大小(以 KB 为单位)?

    有没有办法从 UIImage 获取以 KB 为单位的文件大小 而不从 didFinishPickingMediaWithInfo 获取该图像 所呈现的图像来自相册 我尝试了以下代码 但这给出了以下结果 图像大小 KB 0 000000 vo
  • Xcode 6.3 和 Swift:Unicode 实用程序(例如 UCKeyTranslate)不可用?

    我有以下测试代码 import Cocoa import Carbon let x kUCKeyActionDisplay 在 Xcode 6 2 中没有问题 但在 Xcode 6 3 中此代码会引发错误 错误信息是 Use of unre
  • iPhone Objective-C 以编程方式将范围按钮添加到 UISearchBar

    我目前这段代码用于创建 UISearchBar 改编自之前的 stackoverflow 示例 UISearchBar searchBar UISearchBar alloc initWithFrame CGRectZero searchB
  • 同一视图中的多个 UIAlertView

    我有两个带有确定 取消按钮的 UIAlertView 我通过以下方式捕获用户响应 void alertView UIAlertView alertView didDismissWithButtonIndex NSInteger button
  • 带有 HTML 的 UIActivityViewController

    当我将包含 HTML 内容的字符串作为数组元素传递给UIActivityViewController initWithActivityItems方法中 它不会在选定的 共享 控制器中将其呈现为 HTML 而是呈现 HTML 源 即标记而不是
  • 如何在当前视图上方创建半透明视图层?

    您可能以前见过这种情况 它在 ScoutMob 等消费时尚应用程序中变得非常流行 我正在尝试在启动时实现 60 的透明视图 该视图将覆盖我的主屏幕 解释如何使用主屏幕的功能并在点击时消失 我已经完成了整个应用程序 它从几年前就开始使用 xi
  • 识别用户是否在 iOS 6 设置中定义了本机 Facebook 帐户

    有没有办法通过 FACEBOOK SDK 3 1 和 iOS 6 知道用户是否在 iPhone 设置中定义了其 Facebook 帐户以供本机 Facebook 使用 我想要做的是 当打开我的应用程序时 如果用户在 iPhone 设置中定义
  • Cordova 构建 iOS 应用程序并打开模拟器,但未安装

    我正在 MacOS 上用 Cordova 制作一个 iOS 应用程序 当我跑步时cordova emulate ios该应用程序会构建并打开 iPhone X iOS 11 4 的模拟器 但它从未在模拟器中安装该应用程序 它仅显示模拟器主屏
  • NSXMLParser 解析使用 Windows-1256 编码的 xml 文件

    我想解析 Windows 1256 编码的 rss 文件 但解析器没有读取它 我用 UTF8 编码做了很多解析 但只有这个不起作用 为什么 带有 Windows 1256 的 rss 文件 http youm7 com Rss asp 解决
  • MVVM 在 iOS 中的使用

    我是一名 iOS 开发人员 我对我的项目中存在大量视图控制器感到内疚 因此我一直在寻找更好的方法来构建我的项目 并遇到了 MVVM 模型 视图 视图模型 架构 我读了很多关于 iOS 的 MVVM 文章 但有几个问题 我将用一个例子来解释我
  • 在 Xcode 中查看 TestFlight 崩溃日志

    我已将我的应用程序发送给 TestFlight 的一些外部测试人员 仅当您从 testFlight 安装应用程序时才会出现问题 如果我从 Xcode 安装它 一切都很好 因此 我必须从 iPhone 中删除我的应用程序 并将自己添加为外部测
  • 将 Unmanaged 与 nil 进行比较

    代码是从这篇博客文章复制的 http matthewpalmer net blog 2014 06 21 example ios keychain swift save query http matthewpalmer net blog 2
  • 在 UIScrollView Swift 中禁用垂直滚动

    不要将此问题标记为重复 我读了很多问题 但没有找到问题的答案 我的问题如下 我有一个UIScrollView它应该只水平滚动 这里它垂直滚动 20px 奇怪的事实 它似乎与状态栏的高度相同 我尝试打印内容大小 y 偏移量和高度UIScrol
  • iOS Javascript 引擎 parseFloat(1) 返回负数

    这段代码将使错误出现 function causeBug d var k var n parseFloat 1 var c Math abs d if n lt 0 k else k return k n function for var
  • iPhone 应用程序在 iPhone 4 尺寸下运行,更新后出现黑条

    此前 该应用程序支持 iPhone 5s SE 屏幕和 iPhone 6 8 屏幕 不包括加大尺寸 这是使用启动图像完成的 因此 在 Plus 尺寸设备和 iPhone X 设备上 它会在应用程序上方和下方显示黑条 然后我们发布了一个更新

随机推荐

  • 如何在Android中集成Azure媒体播放器

    我有一个必须播放的清单流媒体网址 如何在android中集成azure媒体播放器来播放流视频 我找到了另一种解决方法来播放清单网址 只需连接即可 format m3u8 aapl v3 在网址末尾 您可以使用任何视频播放器播放此网址
  • 类型转换和初始化,在 Swift 中哪个更好?

    由于Swift对类型做了严格的检查 有时我们需要在NSString和String NSArray和 AnyObject 等之间进行转换 但实际上有两种不同的方法可以做到这一点 类型转换 例如str as String 初始化 比如Strin
  • 在 Angular 中取消提交表单

    我需要一个表格才能两者兼而有之 dirty并不是 submitted为了我的验证工作 我正在尝试通过 CSS 使用 ng invalid ng dirty and ng submitted由 Angular 动态添加的类 这意味着我不能简单
  • 为什么 pynput 不检测数字键盘按下?

    我在 Windows 7 上使用 python 3 7 有没有办法检测 pynput 模块中的数字 例如 1 按键 我尝试了很多其他模块 但除了 tkinter 之外我什么也没得到 它需要一个窗户 但我不想要那个 from pynput i
  • 将日期插入数据库 Postgres JDBC

    我是 Java 新手 也是 Postgres 新手 我有一个关于餐厅的小项目 我有一个像这样的 struk eng bill 表 我有一种方法可以将信息插入到该表中 如下所示 public int insertBill int id kar
  • Set-Content 在我的文件末尾附加一个换行符(换行符、CRLF)

    我的原始配置文件 web1 config 没有多余的行 在记事本中查看 显示所有字符 时看起来如下
  • xcodebuild 期间 RestKit/RestKit.h' 文件未找到错误

    我正在尝试使用 Jenkins CI 自动构建一个使用 Restkit 的 iOS 项目 显然 restkit 作为主项目中的一个项目驻留在其中 并且该项目使用 XCode IDE 成功构建 但是当我使用 xcodebuild jenkin
  • Docker 构建:无法获取档案

    我在 Windows 机器上使用 docker 工具箱 我正在尝试从 github 构建这个项目https github com pyannote pyannote video 当我通过运行构建图像时docker build t pyann
  • jQuery/Ajax 请求被发送两次

    我一遍又一遍地扫描我的代码 但似乎找不到问题 当我点击链接时 add user btn文件actions php被调用两次 因此 PHP 脚本被执行两次 这是脚本 我想它与ajax请求前面的javascript有关 function add
  • 抓住模式下方的六条线

    我有这些重复的台词 FINAL RESULTS NSTEP ENERGY RMS GMAX NAME NUMBER 1000 4 7910E 01 2 1328E 01 9 4193E 01 C 62 最终结果表示一组值的平均值 输出文件合
  • Windows $env:path ="$($env:path);。"它是在哪里添加的?

    我通过运行 解决 了一个问题 env path env path 来自 PowerShell 显然它将当前目录添加到我的路径中 请问它添加到哪个路径变量 在我的环境变量对话框中 我会在哪里看到它被添加 用户变量 系统变量 我很困惑 因为我已
  • 如何使用递归构建螺旋方阵?

    我想使用递归构建一个螺旋方阵 我可以使用迭代方法构建螺旋方阵 如下所示 void main int initial direction UP n MAX p 1 intial direction is set to UP because w
  • 使用 JavaScript 写入 HTML 时出现换行问题

    我在用着常规文本框作为用户写评论的文本输入 然后我使用 JQuery 和 JSON 将数据发送到服务器 然后将其插入数据库 当我想显示此文本时 我使用 jQuery 下载它并准备 HTML 并将其显示在浏览器中 但没有新行 如何保留用户输入
  • Grails:启动应用程序而不连接到数据库

    我在 grails 中有一个应用程序 我可以更改欢迎页面中的参数 包括数据库配置 服务器 用户名等 我从数据源外部化了数据库配置 以便我可以更改它 我想做的是能够在不配置任何数据库的情况下启动应用程序 这样我就可以在欢迎页面中配置它 这对于
  • 如何将应用内购买功能添加到我的 flutter 应用程序中?

    我打算向我的 flutter 应用程序添加应用程序内购买功能 但找不到任何有关应用程序内购买的相关信息或示例应用程序 任何人都可以分享包含应用程序内购买功能的任何链接或示例应用程序吗 谢谢 看看这个包 https pub dev packa
  • 删除字符串中的所有空格

    vb net 中是否有任何函数可以删除字符串中的所有空格 我的意思是像 这是什么 这样的字符串应该是 Whatisthis 谢谢 富尔坎 Use 字符串替换 Dim s As String What is this s s Replace
  • 即使从日历中选择日期后,如何保持 mat-datepicker 日历打开?

    我想保留mat datepicker在特定的 div 中打开 我用了opened true属性 但在选择日期后就会关闭 这应该适合你 将其添加到您的input click openCalendar picker keepOpen 这给你的m
  • Angular Proxy.Conf.Json 不适用于多个 api

    我有以下 proxy conf json 日志行和 api 调用 first api target first api secure false logLevel debug second api target second api sec
  • 通过 JavaScript 分配时 CSS 过渡不起作用

    我在尝试通过 JavaScript 将 CSS3 转换应用到幻灯片时遇到了一些令人头疼的问题 基本上 JavaScript 会获取幻灯片中的所有幻灯片 并将 CSS 类应用到正确的元素以提供漂亮的动画效果 如果没有 CSS3 过渡支持 它将
  • 如何在 UIWebView 加载其初始请求之前设置本地存储?

    视图控制器 import UIKit class ViewController UIViewController override func viewDidLoad super viewDidLoad let wv UIWebView fr