Git Product home page Git Product logo

js_oc's Introduction

JS_OC

JS与原生OC互相调用的Demo(持续更新中),如果帮助到你理解JS与iOS Native的交互,麻烦给个star ⭐️ ⭐️。
计划整理的JS与OC调用的系列包括:

  • 1.在JS 中做一次URL跳转,然后在OC中拦截跳转。(这里分为UIWebView 和 WKWebView两种,去年因为还要兼容iOS 6,所以没办法只能采用UIWebView来做。)
  • 2.利用WKWebView 的MessageHandler。
  • 3.利用系统库JavaScriptCore,来做相互调用。(iOS 7推出的)
  • 4.利用第三方库WebViewJavascriptBridge。
  • 5.利用第三方cordova库,以前叫PhoneGap。(这是一个库平台的库)
  • 6.当下盛行的React Native。

JS_OC_summary

JS_OC_summary是2015年中整理的两种调用方式,包括通过URL和JavaScriptCore来实现调用
在最新的示例中都有做更新和优化。
相关文章地址:
iOS下JS与原生OC互相调用(总结)

JS_OC_URL

JS_OC_URL展示了UIWebView和WKWebView通过URL来实现JS调用原生OC的示例。 在JS_OC_summary的基础上有了点小小的优化。
相关文章地址:
iOS下JS与OC互相调用(一)--UIWebView 拦截URL
iOS下JS与OC互相调用(二)--WKWebView 拦截URL

JS_OC_MessageHandler

JS_OC_MessageHandler是利用WKWebView提供的新的API实现的JS调用原生OC,更简洁和方便。
相关文章地址:
iOS下JS与OC互相调用(三)--MessageHandler

JS_OC_JavaScriptCore

JS_OC_JavaScriptCore是利用JavaScriptCore框架来实现JS与OC相互调用的示例。
相关文章地址:
iOS下JS与OC互相调用(四)--JavaScriptCore

JS_OC_WebViewJavascriptBridge

JS_OC_WebViewJavascriptBridge是通过第三方框架WebViewJavascriptBridge来实现JS与OC交互的示例。
相关文章地址:
iOS下JS与OC互相调用(五)--UIWebView + WebViewJavascriptBridge
iOS下JS与OC互相调用(六)--WKWebView + WebViewJavascriptBridge

目前我Demo中的WebViewJavascriptBridge库不是最新版本,在最新的iOS系统有崩溃,各位在使用该第三方库时,记得先更新到最新版本。

JS_OC_Cordova

JS_OC_Cordova是通过第三方框架Cordova来实现JS与OC交互的示例。
相关文章地址:
iOS下JS与OC互相调用(七)--Cordova 基础
iOS下JS与OC互相调用(八)--Cordova详解+实战

简书和csdn 下分别有一个专题,还在持续更新中:
简书:JS与OC交互

csdn:iOS 原生与 JS 交互

其他几篇待续。

js_oc's People

Contributors

haley-wong avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

js_oc's Issues

真机跑不起来是什么原因啊?

Provisioning profile "iOS Team Provisioning Profile: com.test.JS-OC-Cordova" doesn't include the application-identifier and keychain-access-groups entitlements.

你好,我的加载本地html页面的代码出现问题

[self.webView loadRequest:request];

我下载你的代码带本地查看,完全一样的代码你的是可以运行的,我的在加载上面的代码的时候报错NSURLConnection finished with error - code -1100,请问你是怎么解决的?

同一方法多次请求,并发的情况下的回调

感觉MessageHandler和JavaScriptCore并不能帮我们处理多请求同时并发的情况下,区分回调是对应哪一次请求发起的。
而WebViewJavascriptBridge和Cordova中会在调用时自动生成uniqueId帮助区分。
不知道我的理解对不对会。

JS_OC_WebViewJavascriptBridge[3263:316698] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Completion handler passed to -[WKWebViewJavascriptBridge webView:decidePolicyForNavigationAction:decisionHandler:] was called more than once'

这段代码报错:
`

  • (void)webView:(WKWebView *)webView
    decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction
    decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
    if (webView != _webView) { return; }
    NSURL *url = navigationAction.request.URL;
    __strong typeof(_webViewDelegate) strongDelegate = _webViewDelegate;

    if ([_base isCorrectProcotocolScheme:url]) {
    if ([_base isBridgeLoadedURL:url]) {
    [_base injectJavascriptFile];
    } else if ([_base isQueueMessageURL:url]) {
    [self WKFlushMessageQueue];
    } else {
    [_base logUnkownMessage:url];
    }
    decisionHandler(WKNavigationActionPolicyCancel);
    }

    if (strongDelegate && [strongDelegate respondsToSelector:@selector(webView:decidePolicyForNavigationAction:decisionHandler:)]) {
    [_webViewDelegate webView:webView decidePolicyForNavigationAction:navigationAction decisionHandler:decisionHandler];
    } else {
    decisionHandler(WKNavigationActionPolicyAllow);
    }
    }
    `

可以修改为:
`- (void)webView:(WKWebView *)webView
decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction
decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
if (webView != _webView) { return; }
NSURL *url = navigationAction.request.URL;
__strong typeof(_webViewDelegate) strongDelegate = _webViewDelegate;

if ([_base isCorrectProcotocolScheme:url]) {
    if ([_base isBridgeLoadedURL:url]) {
        [_base injectJavascriptFile];
    } else if ([_base isQueueMessageURL:url]) {
        [self WKFlushMessageQueue];
    } else {
        [_base logUnkownMessage:url];
    }
    decisionHandler(WKNavigationActionPolicyCancel);
}else
{
    if (strongDelegate && [strongDelegate respondsToSelector:@selector(webView:decidePolicyForNavigationAction:decisionHandler:)]) {
        [_webViewDelegate webView:webView decidePolicyForNavigationAction:navigationAction decisionHandler:decisionHandler];
    } else {
        decisionHandler(WKNavigationActionPolicyAllow);
    }
}

}`

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.