jscontext

Access to filesystem in a Mac App JSContext

倾然丶 夕夏残阳落幕 提交于 2020-06-17 00:56:33
问题 I am working on a Mac app that uses a JSContext for some functionality. It uses a call like this (where ctx is a JSContext ): let result: JSValue? = ctx.evaluateScript("someFunction")?.call(withArguments: [someArg1!, someArg2]) Inside the someFunction script, we need to parse a directory and determine whether it exists on the filesystem. Apple's JavaScriptCore API does not have filesystem access as far as I can tell. Is there some way I can have a function like this in swift: public static

Access to filesystem in a Mac App JSContext

喜夏-厌秋 提交于 2020-06-17 00:56:03
问题 I am working on a Mac app that uses a JSContext for some functionality. It uses a call like this (where ctx is a JSContext ): let result: JSValue? = ctx.evaluateScript("someFunction")?.call(withArguments: [someArg1!, someArg2]) Inside the someFunction script, we need to parse a directory and determine whether it exists on the filesystem. Apple's JavaScriptCore API does not have filesystem access as far as I can tell. Is there some way I can have a function like this in swift: public static

Access to filesystem in a Mac App JSContext

寵の児 提交于 2020-06-17 00:55:32
问题 I am working on a Mac app that uses a JSContext for some functionality. It uses a call like this (where ctx is a JSContext ): let result: JSValue? = ctx.evaluateScript("someFunction")?.call(withArguments: [someArg1!, someArg2]) Inside the someFunction script, we need to parse a directory and determine whether it exists on the filesystem. Apple's JavaScriptCore API does not have filesystem access as far as I can tell. Is there some way I can have a function like this in swift: public static

How to stop JavaScriptCore JSContext evaluating by force on iOS?

南笙酒味 提交于 2020-05-17 08:48:51
问题 The bounty expires in 4 days . Answers to this question are eligible for a +50 reputation bounty. Suge wants to draw more attention to this question. Sometime the script being evaluated should be stopped by force, but I can't find a way to achieve this. Someone pointed out JSContextGroupSetExecutionTimeLimit might work, but It doesn't in my testing, can anyone help? Another reference: https://github.com/phoboslab/JavaScriptCore-iOS/issues/14 My code: int extendTerminateCallbackCalled = 0;

iOS下JS与原生的交互一

让人想犯罪 __ 提交于 2020-03-11 12:21:04
本篇主要讲的是UIWebView和JS的交互,在下一节会有wkWebView和JS交互的详解https://www.cnblogs.com/llhlj/p/9144110.html JS调用原生OC 方式一:url拦截,这里略过 注意:在iOS中拦截到的url scheme将全部转化为小写; html中需要设置编码,否则中文参数可能会出现编码问题; JS用打开一个iFrame的方式替代直接用document.location的方式,document.location 有一个很严重的问题,就是如果我们连续 2 次改 document.location 的话,在 delegate 方法中,只能截获后面那次请求,前一次请求由于很快被替换掉,所以被忽略掉。 方式二:通过JavaScriptCore(iOS 7之后),用来做JS交互,因此JS与原生OC交互也变得简单了许多。 //获取js上下文,及本地添加js调用方法,一般情况下都放在-(void)webViewDidFinishLoad:(UIWebView *)webView方法里。 -(void)webViewDidFinishLoad:(UIWebView *)webView{ //获取js上下文 self.jscontext = [webView valueForKeyPath:@"documentView.webView

探索小程序实现

拥有回忆 提交于 2020-01-25 10:27:20
随着小程序的发展与功能的逐步完善,越来越多的产品需要小程序与 APP 的功能能有一些共性,社区跨平台的解决方案越来越多,比如 taro 等为代表的把一套代码编译成多端运行的机制,本文会使用 Swift 作为原生语言,在 iOS 应用上运行一个小程序 Demo, 使用 Android && React Native 也可以采用同样的思路实现。 相关代码仓库: https://github.com/taixw2/rmini 编译层 编译的目的是为了抹平小程序的与 H5 的差异,利用 Vue 实现数据绑定,利用 Web Component 实现小程序的组件功能。 从官网文档中可以看出来,运行一个小程序需要框架(数据绑定渲染)、组件(小程序渲染单元)、api(与原始交互的能力)。 框架实现 转换成单页应用(一种可行的方案) 把所有页面打包成一个 js, 再由 js 管理所有的路由和状态,这种方案适合在 web 端运行,并且是单引擎的方案,在模拟原生的右滑返回等效果也会不尽人意。 转换成多页面 众所周知,小程序是一个双引擎的框架,上面的方案显然不能达到要求, 双引擎的特点是在运行 java script 的黑盒子中,无法访问到 DOM && BOM 等。将所有的逻辑代码在原生的 JavascriptCore 中运行,WebView 中的 Javascript 引擎负责数据绑定

探索小程序实现

為{幸葍}努か 提交于 2020-01-07 08:15:52
随着小程序的发展与功能的逐步完善,越来越多的产品需要小程序与 APP 的功能能有一些共性,社区跨平台的解决方案越来越多,比如 taro 等为代表的把一套代码编译成多端运行的机制,本文会使用 Swift 作为原生语言,在 iOS 应用上运行一个小程序 Demo, 使用 Android && React Native 也可以采用同样的思路实现。 相关代码仓库: https://github.com/taixw2/rmini 编译层 编译的目的是为了抹平小程序的与 H5 的差异,利用 Vue 实现数据绑定,利用 Web Component 实现小程序的组件功能。 从官网文档中可以看出来,运行一个小程序需要框架(数据绑定渲染)、组件(小程序渲染单元)、api(与原始交互的能力)。 框架实现 转换成单页应用(一种可行的方案) 把所有页面打包成一个 js, 再由 js 管理所有的路由和状态,这种方案适合在 web 端运行,并且是单引擎的方案,在模拟原生的右滑返回等效果也会不尽人意。 转换成多页面 众所周知,小程序是一个双引擎的框架,上面的方案显然不能达到要求, 双引擎的特点是在运行 javascript 的黑盒子中,无法访问到 DOM && BOM 等。将所有的逻辑代码在原生的 JavascriptCore 中运行,WebView 中的 Javascript 引擎负责数据绑定,需要解决的难点是

探索小程序实现

♀尐吖头ヾ 提交于 2020-01-05 13:55:39
随着小程序的发展与功能的逐步完善,越来越多的产品需要小程序与 APP 的功能能有一些共性,社区跨平台的解决方案越来越多,比如 taro 等为代表的把一套代码编译成多端运行的机制,本文会使用 Swift 作为原生语言,在 iOS 应用上运行一个小程序 Demo, 使用 Android && React Native 也可以采用同样的思路实现。 相关代码仓库: https://github.com/taixw2/rmini 编译层 编译的目的是为了抹平小程序的与 H5 的差异,利用 Vue 实现数据绑定,利用 Web Component 实现小程序的组件功能。 从官网文档中可以看出来,运行一个小程序需要框架(数据绑定渲染)、组件(小程序渲染单元)、api(与原始交互的能力)。 框架实现 转换成单页应用(一种可行的方案) 把所有页面打包成一个 js, 再由 js 管理所有的路由和状态,这种方案适合在 web 端运行,并且是单引擎的方案,在模拟原生的右滑返回等效果也会不尽人意。 转换成多页面 众所周知,小程序是一个双引擎的框架,上面的方案显然不能达到要求, 双引擎的特点是在运行 javascript 的黑盒子中,无法访问到 DOM && BOM 等。将所有的逻辑代码在原生的 JavascriptCore 中运行,WebView 中的 Javascript 引擎负责数据绑定,需要解决的难点是

iOS React Native 学习总结

这一生的挚爱 提交于 2019-12-09 09:53:40
一、简单介绍 不同于Hybrid ap,React Native里面没有 webview ,iOS7中加入了 JavaScriptCore.framework 框架,而RN正是用JavascriptCore执行js代码的。 二、环境配置 需要安装 Watchman Flow Node 环境,推荐使用 Homebrew ,注意Xcode版本不能低于7.0 brew install node Node安装 brew install watchman brew install flow brew update && brew upgrade 环境更新 三、工程创建 国内需要换源 1 npm config set registry https://registry.npm.taobao.org 2 npm config set disturl https://npm.taobao.org/dist 执行以下两条命令安装全局npm环境和初始化工程RNDEMO $ sudo npm install -g react-native-cli $ react-native init RNDemo cd到工程根目录中用npm start(如果开启了自动启动调试服务器则不需要)启动服务,然后运行工程 集成RN环境到Native中 1.拷贝node_modules环境到工程中 2.将需要的

iOS与js交互(WebView+WKWebView)

心已入冬 提交于 2019-12-08 19:40:45
需求:1点击js登入按钮将用户账号和密码传给移动端 2将客户端的token传给html端 据我了解有以下几种方法 1:webview的javascriptCore 2:webkit 3:url拦截 4:第三方库 我用的是1和2 理论:js与oc相互调用并且传值 我们可以理解成河2边需要送东西的过程 我们需要在js和oc之间搭建一个桥梁而jsexport就是这做桥梁,有了桥梁以后在2端传值我们还需要一个对象(快递员) 就好比现实中js在桥的一段,而移动端在桥的这一边现在他们需要给彼此送东西那么就需要一个快递员(对象) ---------------------------------------------------------- 第一种WebView+ javascriptCore 第一步搭建2端之间桥梁javascriptcore 1)导入javascriptCore Build phass->link binary with libraries 添加头文件 #import <JavaScriptCore/JavaScriptCore.h> 2)初始化桥梁 @property(nonatomic,strong)JSContext *jsContext; 在web的webViewDidFinishLoad:代理方法中 self.jsContext = [self