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

IOS JavaScriptCore 跳转失去对象一些BUG总结

引: 以前做项目的时候也做过webviewjs交互,以为会手到擒来。结果WTFK、两天的时间来研究它。主要遇到了一个BUG,下面简单的说一下。  ...注入    现象: 在UIWebView的webViewDidStartLoad阶段创建JSContext并暴露oc端的方法,在加载一级页面时js正常调用oc的方法,而跳转到二级页面中却无法执行oc的方法...;而在webViewDidStartLoad阶段由于并未加载完js文件, 因此js层定义的函数在oc端无法执行。    ...②在webVIewDidFinishLoad创建    现象:由于加载js阶段在webVIewDidFinishLoad阶段之前,因此一级页面js无法调用oc方法,但是二级页面同理也是如此   原因...因为之前JS无法获得OC对象    解决办法:     1., 可以通过在js设置setTimeout来让任务放到执行队列的末端,先执行oc层的webVIewDidFinishLoad方法,待任务完成后再执行

80930

iOS引入JavaScriptCore引擎框架(一)

JSC的执行理念比较符合传统的引擎逻辑,它包括了2部分:解释器简单方法JIT。...我做过一个测试:首先在UIWebView的webViewDidStartLoad阶段创建JSContext并暴露oc端的方法,在加载一级页面时js正常调用oc的方法,而跳转到二级页面中却无法执行oc的方法...;而在webViewDidStartLoad阶段由于并未加载完js文件, 因此js层定义的函数在oc端无法执行。     ...其次,在webVIewDidFinishLoad阶段创建JSContext并透出oc方法,由于加载js阶段在webVIewDidFinishLoad阶段之前,因此一级页面js无法调用oc方法,但是二级页面同理也是如此...为此,可以通过实现一个简易的框架来完成js层oc层的交互,为了更好的兼容性,只有在webVIewDidFinishLoad阶段创建JSContext。

1.5K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    iOS引入JavaScriptCore引擎框架(二)

    我们可以在这两个函数里面对错误信息进行处理 webView:didFailProvisionalLoadWithError:forFrame: 这个错误发生在请求数据之前,最常见是发生在无效的URL或者网络断开无法发送请求...这样,我们可以在UIWebView的webViewDidStartLoadwebViewDidFinishLoad之间获取到JSContext,进行ocjs的双向通信。...最终oc端接口的代码放在webView:didCreateJavaScriptContext:forFrame:中,这样js文件只需加载完毕就可执行oc的接口方法;而oc端要访问js的接口则可在webVIewDidFinishLoad...;),在oc端无法访问,只有通过普通的函数声明才能解决问题,这可能与JSContext的内存指针引用相关,为了解决此问题,我通过创建一个全局函数来暴露js端的接口对象,通过获取的对象来访问具体的接口方法...我们有理由憧憬未来在iOSandroid下更方便的集成js引擎来完成建议的双向通信。

    1.5K40

    iOS学习巩固笔记-UIWebViewJavaScript

    scalesPageToFit; 1.3 监听UIWebView的加载过程 成为UIWebView的代理,遵守UIWebViewDelegate协议,就能监听UIWebView的加载过程 - (void)webViewDidStartLoad...:(UIWebView *)webView; 请求完毕(加载数据完毕)时调用这个方法 - (void)webViewDidFinishLoad:(UIWebView *)webView; 请求错误时调用这个方法...[request.URL.absoluteString containsString:@"dushu"]; } //开始加载网页,不仅监听我们指定的请求,还会监听内部发送的请求 -(void)webViewDidStartLoad...:(UIWebView *)webView //网页加载完毕之后会调用该方法 -(void)webViewDidFinishLoad:(UIWebView *)webView //网页加载失败调用该方法...但是对于>2个的参数或者有返回值的处理,那就需要做些额外工作才能搞定。那么在这种情况下,我们就可以使用NSInvocation来进行这些相对复杂的操作。

    1.2K70

    UIWebView 浏览器控件一、初始化与三种加载方式二、常用属性方法三、代理方法 UIWebViewDelegate四、其它案例:

    缺点:(1)性能差(2)数据通讯复杂(3)耗费流量 使用场景:(1)排版复杂的内容(2)需后台灵活控制的界面 一、初始化与三种加载方式 UIWebView继承于UIView,因此,其初始化方法一般的...停止加载数据 - (void)stopLoading; 3.返回上一级 - (void)goBack; 4.跳转下一级 - (void)goForward; 5.通过javaScript操作web数据,一般在webViewDidFinishLoad...(稍后整理,比较重要) 拼接HTML网页方法显示在WebView上 2.开始加载时调用的方法 - (void)webViewDidStartLoad:(UIWebView *)webView; 3.网页加载完毕执行的方法...,一般在里面执行JS代码(删除一些节点),相当于网页JS的window.onload属性 - (void)webViewDidFinishLoad:(UIWebView *)webView; 例子: -...(void)webViewDidFinishLoad:(UIWebView *)webView{ NSString *js = @"document.getElementsByTagName('footer

    1.5K60

    【iOS开发】从 UIWebView 到 WKWebView

    ② UIWebView WKWebView 的区别 WKWebView 更快(占用内存可能只有 UIWebView 的1/3~1/4),没有缓存,更为细致地拆分了 UIWebViewDelegate...所以从现在开始,再开发 App 只兼容 iOS 8 iOS 9 两个版本就可以了(如果你的产品对覆盖率要求不是很苛刻的话)。...WKWebView 是 iOS 8 之后才有的 WebKit 中的内容,所以之前我们要同时兼容 iOS 7 iOS 8 的时候,可以推辞说 UIWebView WKWebView 一起做太麻烦了...WKNavigationDelegate - webView:didStartProvisionalNavigation: 已开始加载页面,可以在这一步向view中添加一个过渡动画 UIWebViewDelegate - webViewDidStartLoad...: WKNavigationDelegate - webView:didCommitNavigation: 页面已全部加载,可以在这一步把过渡动画去掉 UIWebViewDelegate - webViewDidFinishLoad

    1.8K20

    IOS开发系列——UIWebView专题【整理,部分原创】

    自己生成的html,有时无法避免要使用local css, js or image(当然你也可以使用url来链接到网上的css/js/image)。...baseURL就是你的resourcefolder path 2.如果把charset='utf-8' src='test.js'>改成 charset='utf-8' src='test.js' />则无法...其解决方法需要Javascriptnavtive code一起来做,其基本原理可参考这片文章,其流程是在Javascript handler中每创建Ajax的请求时,需要将这段js存在ajax_handler.js...ajax_handler"withExtension:@"js"]encoding:NSUTF8StringEncodingerror:nil]retain]; } 载入页面后,执行这段js - (void)webViewDidStartLoad...loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com/"]]]; - (void)webViewDidFinishLoad

    93540

    工作主域间的信任失败原因_电脑域改为工作组后无法登录

    这个错误通常是由于访问的主机不能再确保可以当前加入的活动目录域进行安全通信造成的。 当前主机的私有安全凭据域控制器中的值不匹配。...当然简单的可以把安全凭据理解为密码,实际上你知道域环境通过非常严格Kerberos验证,因此实际是Kerberos的Keytable的加密存储在本地安全授权子系统中;因此如果在主机上以域账户登录\验证时,如果验证在本地存储的私有凭据收到来自...这个报错通常会在windows serverwindows client上发生。...整理一下遇到收集的处理方法: 1,系统时间不同步,建议采用NTP同步。也可以强制同步与NTP的时间。...3,域客户端域控制器通信正常,没有防火墙、IPS、安全补丁等阻碍kerberos验证完整性。放开通信权限或者卸载安全补丁即可恢复。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

    2.1K60

    【IOS开发基础系列】UIWebView专题

    自己生成的html,有时无法避免要使用local css, js or image (当然你也可以使用url来链接到网上的css/js/image)。         ...其解决方法需要Javascriptnavtive code一起来做,其基本原理可参考这片文章,其流程是在Javascript handler中每创建Ajax的请求时,需要将这段js存在ajax_handler.js...withExtension: @"js"] encoding: NSUTF8StringEncoding error: nil] retain]; }       载入页面后,执行这段js: - (void) webViewDidStartLoad...loadRequest: [NSURLRequest requestWithURL: [NSURL URLWithString: @"http://www.baidu.com/"]]]; - (void) webViewDidFinishLoad...js的处理逻辑     问题:        如果WebView不在最上层,即失去了焦点,则WebView无法接受到原生发给js端的指令。

    36030

    币圈大神说:比特币处于投机贪婪驱动的泡沫之中,使比特币无法按照设计运行 你怎么看?

    著名的比特币推崇人士Andreas Antonopoulos也加入了摩根大通CEO Jamie Dimon亿万富翁投资者Janet Yellen之列,认为比特币这种全球最火热的数字货币是一种泡沫。...据《澳大利亚金融评论》报告,Andreas这位比特币区块链大师警告,到目前为止,大家在2017看到的价格上涨并不是真正采用使用的结果,而是人们希望获得早期加密货币倡导者所看到的抛物型收益: “我们所看到的是一个由投机贪婪驱动的明确且根本的泡沫...他甚至写了两本这个领域最受欢迎的书:《精通比特币》《货币网络》。 相反于追求比特币能够带来的财富,Antonopoulos更喜欢致力于推广比特币。...《澳大利亚金融评论》继续表示Antonopoulos警告,由于大量用户希望在投资中获得快速收益,这导致比特币无法按照设计的方式运行: “因此,比特币网络拥堵的 增加意味着比特币目前没有按照最初设计的功能运行

    69580
    领券