首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

oc与js交互清除js缓存

在Objective-C(OC)与JavaScript(JS)交互的过程中,清除JavaScript缓存通常涉及到以下几个方面:

基础概念

  1. WebView缓存:在使用WKWebViewUIWebView时,浏览器会缓存网页资源,包括JavaScript文件,以提高加载速度。
  2. JavaScript缓存机制:浏览器通过HTTP头信息(如Cache-ControlExpires)来控制资源的缓存行为。

优势

  • 提高性能:缓存可以减少网络请求,加快页面加载速度。
  • 减少服务器负载:减少不必要的资源请求,降低服务器压力。

类型

  • 内存缓存:存储在浏览器内存中,速度快但容量有限。
  • 磁盘缓存:存储在设备磁盘上,容量大但访问速度较慢。

应用场景

  • 动态内容更新:当JavaScript文件频繁更新时,需要确保用户加载的是最新版本。
  • 调试和测试:在开发和测试过程中,清除缓存可以避免旧代码的影响。

清除JavaScript缓存的方法

1. 使用WKWebView的配置

代码语言:txt
复制
WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
configuration.websiteDataStore = WKWebsiteDataStore.nonPersistentDataStore;
WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.frame configuration:configuration];
[self.view addSubview:webView];

nonPersistentDataStore会禁用持久化存储,包括缓存。

2. 手动清除缓存

代码语言:txt
复制
if (@available(iOS 9.0, *)) {
    NSSet *dataTypes = [NSSet setWithArray:@[
        WKWebsiteDataTypeDiskCache,
        WKWebsiteDataTypeMemoryCache,
        WKWebsiteDataTypeCookies,
        WKWebsiteDataTypeSessionStorage,
        WKWebsiteDataTypeLocalStorage,
        WKWebsiteDataTypeIndexedDBDatabases,
        WKWebsiteDataTypeWebSQLDatabases
    ]];
    
    NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
    [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:dataTypes modifiedSince:dateFrom completionHandler:^{
        // 缓存清除完成
    }];
} else {
    // Fallback on earlier versions
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
    NSArray *files = [[NSFileManager defaultManager] subpathsAtPath:path];
    for (NSString *file in files) {
        NSString *filePath = [path stringByAppendingPathComponent:file];
        [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil];
    }
}

3. 通过URL请求头控制缓存

在加载JavaScript文件时,可以通过设置HTTP请求头来控制缓存行为:

代码语言:txt
复制
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://example.com/script.js"] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10.0];
[webView loadRequest:request];

NSURLRequestReloadIgnoringLocalCacheData会忽略本地缓存,强制从服务器加载最新资源。

遇到的问题及解决方法

问题:JavaScript文件未更新

原因:浏览器缓存了旧的JavaScript文件。

解决方法

  1. 使用版本号或时间戳作为文件名的一部分,确保每次更新都有新的URL。
  2. 设置HTTP头信息,强制浏览器不使用缓存。
代码语言:txt
复制
NSString *jsURL = [NSString stringWithFormat:@"https://example.com/script.js?v=%@", [NSDate date]];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:jsURL] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10.0];
[webView loadRequest:request];

通过以上方法,可以有效清除JavaScript缓存,确保加载的是最新版本的文件。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS开发中OC与JS交互(UIWebView)

https://blog.csdn.net/u010105969/article/details/53189934 之前虽然做过OC与JS交互,但都是比较简单的效果:点击网页中的图片,然后进行图片浏览...现在对OC与JS交互这块也不是很清楚,今天只是把之前的代码贴过来以便今后更好地理解OC与JS的交互。 首先需要往网页中注入JS。注入JS的工作是后台做的。...可好像安卓和iOS还是有区别的,因为之前安卓那边可以实现与JS的交互,而我这边却不能。后台后台修改了代码,我这边也就可以进行交互了。...中的方法名改掉,OC找不到相应方法,这里就会打印异常信息 NSLog(@"异常信息:%@", exceptionValue);     }; } 苹果有了 OC与JS的交互的地址: http://mp.blog.csdn.net/postedit/53541088

3.9K30
  • oc 与 js 互相调用

    很久之前用的互相调用的方法,今天要分享下,故记录下 Objective-C,通常写作ObjC或OC和较少用的Objective C或Obj-C,是扩充C的面向对象编程语言。...排版布局能力强    强大的HTML+CSS让人膜拜 控件缺点 性能    Native先生与HTML5先生争论时最喜欢说的一句话就是:“你性能不行”。...Web App运行在浏览器里,浏览器的开放能力难以支持HTML5与Native对抗。...数据通讯复杂    UIWebView与App之间进行数据通讯只能通过javascript或者UIWebViewDelegate来进行,客户端想传参数给UIWebView修改网页或者从网页中获取数据都比较复杂...调oc 网页中的点击方法可以调起原生页面 /** 拦截URL js调用oc @param webView @param request @param navigationType @return

    1.2K10

    WebViewJavascriptBridge源码探究--看OC和JS交互过程

    今天把实现OC代码和JS代码交互的第三方库WebViewJavascriptBridge源码看了下,oc调用js方法我们是知道的,系统提供了stringByEvaluatingJavaScriptFromString...现在主要是了解js是如何调用oc方法的,分享下探究过程。    ...源码不多,就一个头文件WebViewJavascriptBridge.h和实现文件WebViewJavascriptBridge.m, 和一个js文件,实现在js那边可以调用oc方法,也可以在oc里面调用...先上图,实现简单的oc和js互相调用的demo, 另外附加一个模拟项目中用到的oc和js互相调用场景: ? 一、然后说说js调用oc方法的原理,它们是如何实现的?库文件三个 ?...至此,js调用oc成功 总结js调用oc过程: -->   触发js事件 -->   把要传入参数和自定义注册标识“js_Call_Objc_Func”存入js数组sendMessageQueue

    3.4K50

    Java与js的交互

    在android的开发过程中,有很多时候需要用到本地java代码和javascript进行交互。...android对交互进行了很好的封装,在开发中我们可以很简单的用java代码调用webview中的js,也可以用webview中的js来调用本地的java代码,这样我们可以实现很多原来做不了的功能,比如点击网页上的电话号码后...废话不多说,这次教程的目标如下 android 中的java代码调用webview里面的js脚本 webview中的js脚本调用本地的java代码 java调用js并传递参数 js调用java并传递参数...脚本就可以通过我们给的这个别名来调用我们的方法,在上面的代码中,this是实例化的对象,wst是这个对象在js中的别名 功能三 java代码调用js并传递参数 只需要在待用js函数的时候加入参数即可...的函数test()的参数 功能四 js调用java函数并传参,java函数正常书写,在js脚本中调用的时候稍加注意 然后在html页面中,利用如下代码,即可实现调用 <a

    5K90

    UIWebView与JS的交互

    之所以要把图片操作放在native端做的好处在于:1、可以进行本地缓存,下次进入这篇文章可以直接从缓存读取,提高响应速度并且节省用户流量。2、可以实现点击图片放大、保存图片到相册等操作。...中,交互的方式只有两种:send 和 callHandle,JS和OC都有这两个方法,所以对应的四种关系是: ?...这个例子展现了一个完整的过程,基本涉及了JS和OC的各种交互包括OC调用JS、JS调用OC等。如果你有其它的业务需求,也基本按照这个流程就可以依样画葫芦了,唯一不同的也就是业务逻辑了。...选择控制台,你就可以看到久违的调试窗口以及JS的console.log了。 ? 以上就是使用 WebViewJavascriptBridge 进行UIWebView与JS的深度交互的例子。...Node.JS都可以写服务器了,React Native都可以开发iOS了。学无止境,iOS应该先搞定OC和Swift再去搞前端。 参考:UIWebView与JS的深度交互

    3.7K20
    领券