iOS js 使用与JSContext
JSContext:js执行环境,包含了js执行时所需要的所有函数和对象;
js执行时,会在执行环境搜索需要的函数然后执行,或者保存传入的变量或函数;
JSContext *jsContext = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
jsContext[@"sayhi"] = ^(NSString *name) {
NSLog(@"say hi to %@",name);
};
<div data-role="collapsible">
<h3 onclick="sayhi('systemVersion')">systemVersion</h3>
<p id="systemVersion"></p>
</div>
* thread #7: tid = 0x15e622, 0x000000010f557f13 jsTest`__27-[ViewController refreshXX]_block_invoke(.block_descriptor=<unavailable>, name=@"systemVersion") + 51 at ViewController.m:70, name = 'WebThread', stop reason = breakpoint 1.1
* frame #0: 0x000000010f557f13 jsTest`__27-[ViewController refreshXX]_block_invoke(.block_descriptor=<unavailable>, name=@"systemVersion") + 51 at ViewController.m:70
frame #1: 0x00000001106145cc CoreFoundation`__invoking___ + 140
frame #2: 0x000000011061441e CoreFoundation`-[NSInvocation invoke] + 286
frame #3: 0x000000010f9cedb3 JavaScriptCore`JSC::ObjCCallbackFunctionImpl::call(JSContext*, OpaqueJSValue*, unsigned long, OpaqueJSValue const* const*, OpaqueJSValue const**) + 451
frame #4: 0x000000010f9ce926 JavaScriptCore`JSC::objCCallbackFunctionCallAsFunction(OpaqueJSContext const*, OpaqueJSValue*, OpaqueJSValue*, unsigned long, OpaqueJSValue const* const*, OpaqueJSValue const**) + 262
frame #5: 0x000000010f9cfbad JavaScriptCore`long long JSC::APICallbackFunction::call<JSC::ObjCCallbackFunction>(JSC::ExecState*) + 573
frame #6: 0x000000010f999340 JavaScriptCore`JSC::LLInt::setUpCall(JSC::ExecState*, JSC::Instruction*, JSC::CodeSpecializationKind, JSC::JSValue, JSC::LLIntCallLinkInfo*) + 528
frame #7: 0x000000010f9a035d JavaScriptCore`llint_entry + 22900
frame #8: 0x000000010f99a7d9 JavaScriptCore`vmEntryToJavaScript + 326
frame #9: 0x000000010f86c959 JavaScriptCore`JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*) + 169
frame #10: 0x000000010f8535ad JavaScriptCore`JSC::Interpreter::executeCall(JSC::ExecState*, JSC::JSObject*, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&) + 493
frame #11: 0x000000010f627bd7 JavaScriptCore`JSC::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&, WTF::NakedPtr<JSC::Exception>&) + 71
frame #12: 0x00000001158f5c1a WebCore`WebCore::JSEventListener::handleEvent(WebCore::ScriptExecutionContext*, WebCore::Event*) + 1002
frame #13: 0x0000000115542630 WebCore`WebCore::EventTarget::fireEventListeners(WebCore::Event*, WebCore::EventTargetData*, WTF::Vector<WebCore::RegisteredEventListener, 1ul, WTF::CrashOnOverflow, 16ul>&) + 752
frame #14: 0x0000000115542267 WebCore`WebCore::EventTarget::fireEventListeners(WebCore::Event*) + 311
frame #15: 0x000000011552b50e WebCore`WebCore::MouseOrFocusEventContext::handleLocalEvents(WebCore::Event&) const + 174
frame #16: 0x000000011552c0b8 WebCore`WebCore::EventDispatcher::dispatchEvent(WebCore::Node*, WTF::PassRefPtr<WebCore::Event>) + 920
frame #17: 0x0000000115c2dc5d WebCore`WebCore::Node::dispatchEvent(WTF::PassRefPtr<WebCore::Event>) + 29
frame #18: 0x000000011551561e WebCore`WebCore::Element::dispatchMouseEvent(WebCore::PlatformMouseEvent const&, WTF::AtomicString const&, int, WebCore::Element*) + 318
frame #19: 0x00000001155328df WebCore`WebCore::EventHandler::dispatchMouseEvent(WTF::AtomicString const&, WebCore::Node*, bool, int, WebCore::PlatformMouseEvent const&, bool) + 111
frame #20: 0x0000000115534108 WebCore`WebCore::EventHandler::handleMouseReleaseEvent(WebCore::PlatformMouseEvent const&) + 1192
frame #21: 0x000000011553b50d WebCore`WebCore::EventHandler::mouseUp(WebEvent*) + 237
frame #22: 0x00000001150a2be3 WebKitLegacy`-[WebHTMLView mouseUp:] + 115
frame #23: 0x00000001160e230d WebCore`-[WAKView _selfHandleEvent:] + 125
frame #24: 0x00000001160e226f WebCore`-[WAKView handleEvent:] + 63
frame #25: 0x00000001160e546d WebCore`-[WAKWindow sendEventSynchronously:] + 269
frame #26: 0x0000000110e02e81 UIKit`__47-[UIWebDocumentView(Interaction) performClick:]_block_invoke + 740
frame #27: 0x0000000110e02b97 UIKit`-[UIWebDocumentView(Interaction) performClick:] + 68
frame #28: 0x0000000110e0349f UIKit`__64-[UIWebDocumentView(Interaction) _sendMouseMoveAndAttemptClick:]_block_invoke + 345
frame #29: 0x00000001160fd996 WebCore`HandleRunSource(void*) + 390
frame #30: 0x0000000110651301 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
frame #31: 0x00000001106471a7 CoreFoundation`__CFRunLoopDoSources0 + 423
frame #32: 0x00000001106466e3 CoreFoundation`__CFRunLoopRun + 867
frame #33: 0x00000001106460f8 CoreFoundation`CFRunLoopRunSpecific + 488
frame #34: 0x00000001160fd325 WebCore`RunWebThread(void*) + 469
frame #35: 0x000000011286799d libsystem_pthread.dylib`_pthread_body + 131
frame #36: 0x000000011286791a libsystem_pthread.dylib`_pthread_start + 168
frame #37: 0x0000000112865351 libsystem_pthread.dylib`thread_start + 13
iOS js 使用与JSContext的更多相关文章
- iOS JS 交互之利用系统JSContext实现 JS调用OC方法以及Objective-C调用JavaScript方法
ios js 交互分为两块: 1.oc调用js 这一块实现起来比较简单, 我的项目中加载的是本地的html,js,css,需要注意的是当你向工程中拖入这些文件时,选择拷贝到工程中,(拖入的文件夹是蓝色 ...
- iOS JS 交互之利用系统JSContext实现 JS调用oc方法
ios js 交互分为两块: 1.oc调用js 这一块实现起来比较简单, 我的项目中加载的是本地的html,js,css,需要注意的是当你向工程中拖入这些文件时,选择如下操作,(拖入的文件夹是蓝色的, ...
- iOS js oc相互调用(JavaScriptCore)(二)
下来我们使用js调用iOS js调用iOS分两种情况 一,js里面直接调用方法 二,js里面通过对象调用方法 首先我们看第一种,直接调用方法. 其中用到了iOS的block 上代码 -(void)we ...
- iOS js oc相互调用(JavaScriptCore 下)
下来我们使用js调用iOS js调用iOS分两种情况 一,js里面直接调用方法 二,js里面通过对象调用方法 首先我们看第一种,直接调用方法. 其中用到了iOS的block 上代码 -(void)we ...
- 转载 OS js oc相互调用(JavaScriptCore) ---js调用iOS ---js里面直接调用方法
OS js oc相互调用(JavaScriptCore) 接着上节我们讲到的iOS调用js 下来我们使用js调用iOS js调用iOS分两种情况 一,js里面直接调用方法 二,js里面通过对象调用 ...
- 转载 iOS js oc相互调用(JavaScriptCore) --iOS调用js
iOS js oc相互调用(JavaScriptCore) 从iOS7开始 苹果公布了JavaScriptCore.framework 它使得JS与OC的交互更加方便了. 下面我们就简单了解一下这 ...
- React Native分析(index.ios.js)
定义创建组件MyComponent(index.ios.js): 'use strict' var React = require('react-native'); var { AppRegistry ...
- iOS js oc相互调用JavaScriptCore(一)
原址:http://blog.csdn.net/lwjok2007/article/details/47058101 1.普通调用 从iOS7开始 苹果公布了JavaScriptCore.framew ...
- iOS JS 和 OC交互 / JS 和 native 相互调用
现在app 上越来越多需求是通过UIWebView 来展示html 或者 html5的内容, js 和 native OC代码交互 就非常常见了. js 调用 native OC代码 第一种机制 ( ...
随机推荐
- Spring---AOP与DI的初步理解
依赖注入 依赖注入并没有我们听上去那么复杂,在项目中应用依赖注入,会使代码变的异常简单,更易于理解和测试. 任何一个有实际意义的应用,都是多个类组成,这些类之间相互协作,来实现特定的业务逻辑,通常,每 ...
- [转]wxParse-微信小程序富文本解析组件
本文转自:https://github.com/icindy/wxParse 基本使用方法 Copy文件夹wxParse - wxParse/ -wxParse.js(必须存在) -html2json ...
- ado.net中的 sqlconnection sqlcommand datareader dataset SqlDataAdapter之间的关系
Connection: 和数据库交互,必须连接它.连接帮助指明数据库服务器.数据库名字.用户名.密码,和连接数据库所需要的其它参数.Connection对象会被Command对象使用,这样就能够知道是 ...
- grpc的数据包监控
CommView是一个专门为网络管理员,安全专家,网络程序员,以及任何想要全面了解一台个人电脑或一个网段中的网络通信量的用户设计的强大的网络监控器和分析器,不过它支持Win系统. 我这里用的 Comm ...
- POJ 1789(最小生成树)
这题要把给的字符串变成边的权值 #include <cstdio> #include <iostream> #include <queue> #include &l ...
- C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)
一:值类型和引用类型的含义参考前一篇文章 C#学习笔记(基础知识回顾)之值类型和引用类型 1.1,C#数据类型分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型.如果int只不过是栈上的一个4字 ...
- Bzoj2780: [Spoj]8093 Sevenk Love Oimaster
题目 传送门 Sol 就是广义\(sam\) 然后记录下每个状态属于哪些串,开\(set\)维护 \(parent\)树上启发式合并一下就好了 # include <bits/stdc++.h& ...
- WC前的颓废——带花树
QAQ现在很不想写题解博客那就来写个算法吧QAQ... 带花树 题目 来看个题... UOJ79. 某机房里有\(n\)个OIer,其中有\(n\)个男生,\(0\)个女生.现在他们要两两配对. 有\ ...
- windows10(本机)与VirtualBox中CentOS7(虚拟机)互相访问总结
先把我这里的环境说下: 本机(windows10),发布了一个tomcat服务:http://192.168.0.106:8080/axis/services/VPMService?wsdl 如下图: ...
- weex常用属性梳理
之前发了一篇weex集成和开发的博客,主要是讲了weex开发环境的搭建和文件的编译.部署,还有就是一些个人对weex的理解,最近将原生的项目改造成weex的项目,也持续了有两个多月的时间了,后面我会发 ...