精华内容
下载资源
问答
  • swiftJS交互( JS调用swift方法)
    千次阅读
    2017-05-16 16:49:35

    1.首先创建一个代理方法继承JSExport

    里面实现的方法是js需要调用swift的方法

    @objc protocol JavaScriptSwiftDelegate: JSExport {
        func method(str:String) //带参数的
        func method2()//不带参数
    }
    

    2.创建一个model继承NSObject 并遵守上面的协议 实现协议要求的方法

    在model里面声明两个block便于参数的传出

    @objc class SwiftJavaScriptModel: NSObject, JavaScriptSwiftDelegate {
        weak var jsContext: JSContext?
        typealias customeBlock = (str: String )->Void
        typealias customeBlock2 = ()->Void
        var block:customeBlock?
        var block2:customeBlock2?
    
        func method(str: String) {
          block(str:str)
        }
        func method2(){
           block2()
        }
    }
    

    3.让swift 的webView实现UIWebViewDelegate,

    yourweb.delegate = self
    

    4.实现webVeiw的代理方法 在webViewDidFinishLoad的代理方法里进行交互

    let context=webView.valueForKeyPath("documentView.webView.mainFrame.javaScriptContext") as? JSContext
     let model = SwiftJavaScriptModel()
     model.controller = self
     model.jsContext = context
     model.block = {
        //实现对应的操作 调用swift的方法
    }
     self.jsContext = context
     //下面的方法是把model 注入js里面  native是js里面方法的前缀 比如js里面的方法是
     //native.method()
     self.jsContext?.setObject(model, forKeyedSubscript: "native")
     let url = NSBundle.mainBundle().URLForResource("html路径", withExtension: "html")
     self.jsContext.evaluateScript(try?String.init(contentsOfURL: url!))
    
    更多相关内容
  • 此资源为 swiftJavaScript 之间方法的相互调用,相互传值。
  • StringJS Swift扩展库 一个很小的Swift扩展库,实现了我们惯用JavaScript String函数。 您可以在阅读有关JavaScript String函数的文档。 可用功能 length -> Int (实例变量) charAt(index: Int) -> String? ...
  • mt940js是适用于JavaScriptSWIFT mt940银行对帐单格式解析器(ES2015)。 接收mt940文件的文本,输出已解析语句和事务的数组。 请参阅下面的示例。 安装 npm install mt940js API和用法 主解析器类- Parser -将...
  • js2swift-iOS-alert iOS+UIWebView+WKWebView+JavaScript调用Swift+重定义iOS Alert Main.storyboard--选中UIWebView或者WKWebView的Scene--勾选 Is Initial View Controller,可分别测试UIWebView或者...
  • 针对WKWebView进行的封装、支持和H5交互、包括调用js方法等。挺全面的!真的。其他针对WKWebView封装的就不要看了。
  • github "nerdishbynature/JSDiff.swift" 用法 差异词 只需将所需的颜色放入JSDiff初始化程序中,其中deletedColor是较浅的颜色,而deletedWordColor是应更突出的颜色(请参见示例图像)。 此方法将导致JSLineDiff ...
  • web3swift 功能的快速实现 :high_voltage: 通过JSON RPC与远程节点进行交互 :thought_balloon: 智能合约ABI解析 :open_book: 本地密钥库管理(与geth兼容) 私钥和交易直接在iOS设备上创建,并直接发送到节点 ...
  • 之前开发过移动端与js交互,近期又遇到了同样的需求,所以干脆记录一下自己项目中用的知识点 前言 在日常开发中,webview的使用是很常见的。UIwebview和WKWebView我在项目都有用到,不过苹果现在主推的是WKWebView...

    之前开发过移动端与js交互,近期又遇到了同样的需求,所以干脆记录一下自己项目中用的知识点

    前言


    在日常开发中,webview的使用是很常见的。UIwebview和WKWebView我在项目都有用到,不过苹果现在主推的是WKWebView。因人而异,自己喜欢用哪个就用哪个。本文是记录一下我在项目中用webview做的一些操作。(本文为原创,转发请标明出处)


    应用场景


    webview和前端页面交互,就是移动端调用h5的方法,同时h5也可以调用移动端的方法。
    我们前端有个需求,就是在我们移动端加载h5的时候,需要给网页传一个值,所以h5定义了一个方法,叫getuuid
    这个方法名是我与前端工程师约定好的
    在这里插入图片描述

    webview给h5传值


    1、UIWebView

    func webViewDidFinishLoad(_ webView: UIWebView) {
            let User_UIID: String = KeychainTool.shared.getUUID() ?? ""
            let userName: String = UserModel.shared.username ?? ""
            self.webView.stringByEvaluatingJavaScript(from: "getuuid('\(User_UIID)','\(userName)')")
    }
    

    2、WKWebView

    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
         let User_UIID: String = KeychainTool.shared.getUUID() ?? ""
         let userName: String = UserModel.shared.username ?? ""
         self.webView.evaluateJavaScript("getuuid('\(User_UIID)','\(userName)')") { (dic, error) in
              print("\(dic)--\(error?.localizedDescription)---\(userName)--\(User_UIID)")
              if error == nil {
                 传值成功
              }
        }
    }
    

    给h5传值就是这么简单粗暴

    h5给webview传值


    h5给webview传值的,WKWebView和UIWebView稍微有点不同

    1、WKWebView

    h5给webview传值,一样需要前端和移动端约定好一个方法名。
    前端的代码,regcallBack就是双方约定的方法名

    function register() {
        info就是前端给webview传的消息体
        webkit.messageHandlers.regcallBack.postMessage(info);
    }
    

    移动端的代码,需要在WKWebView初始化的地方加上设置,同时需要遵循代理 WKScriptMessageHandler

    let config = WKWebViewConfiguration()
    let userContent = WKUserContentController()
    userContent.add(self, name: "regcallBack") regcallBack就是与前端约定好的方法名
    config.userContentController = userContent
    let myWebView = WKWebView(frame: .zero, configuration: config)
    

    一旦h5传值过来了,这个代理方法就是可以直接获取h5传过来的值

    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
       if message.name == "regcallBack" {
           print(message.body)
           message.body就是h5传过来的消息体
       }
    }
    

    2、UIWebView

    前端代码

    function sendParam(){
        var url="param:"+"丁丁风";
        document.location = url;//发送参数
     }
    

    webview这边只需要在代理方法监听就行

    func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebView.NavigationType) -> Bool {
          let url = request.url?.absoluteString
          if url?.contains("param") == true {
                如果包含,证明传值成功,接下来就是分割字符串了
          }
          return true
    }
    

    结束


    跟h5交互在平常开发里面是经常遇到的,所以我在这里记录一下。希望可以帮到有需要的人

    展开全文
  • CodeEditor一个SwiftUI TextEditor视图,使用Highlight.js高亮显示语法。 它建立在Highlighter的顶部,该Highlighter进行Highlight.js的包装。 然后,CodeEditor将内容打包为SwiftUI。 SVG Shaper for SwiftUI中的...
  • 1. js调用iOS ...// jsToIOS 是JavaScript向IOS发送数据时,使用的函数名 self.wkWebView?.configuration.userContentController.add(self, name: "jsToIOS") func userContentController(_ userCon

    几乎是默写出来,加上自己理解的博客(iOS面试)

    1. js调用iOS

    js调用:

    window.webkit.messageHandlers.jsToIOS.postMessage("这是js传递到ios的数据");
    

    iOS接收:

    // jsToIOS 是JavaScript向IOS发送数据时,使用的函数名
        self.wkWebView?.configuration.userContentController.add(self, name: "jsToIOS")
    
    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        print("JS发送到IOS的数据====\(message.body), name=\(message.name)")
    }
    

    2.iOS调用js

    iOS调用js

    // 重点:IOS 调用 JavaScript 的 navButtonAction 方法,并传递参数
         // 使用匿名回调函数接收方法返回值
         self.wkWebView!.evaluateJavaScript("navButtonAction('test1',18)") {
             (response, error) in
             print("message: \(response!)")
         }
    

    iOS向网页注入JS

     // ios 向网页注入 js,注入js分为在网页加载完毕注入(.atDocumentStart)和加载之前注入(.atDocumentEnd)
        let js = "document.getElementsByTagName('h2')[0].innerText='我是ios原生为h5注入的方法'"
        let script = WKUserScript.init(source: js, injectionTime: .atDocumentEnd, forMainFrameOnly: true)
        wkWebView!.configuration.userContentController.addUserScript(script)
    

    3.参考博客:

    IOS-SwiftUI-IOS原生与JavaScript交互的应用 - 知乎

    展开全文
  • SwiftJS的简单交互
  • SwiftJSBridge是一个方便JavaScript桥,用Swift编写,支持WKWebView和UIWebView 例子 Swift let JSBridge = SwiftJSBridge ( for : webview) JSBridge. addSwift ( bridge : { (data, cb) in cb ? ([ " appVersion ...
  • Swift

    2021-02-08 18:12:31
    Swift
  • Swift编写的针对本地iOS,macOS,tvOS,watchOS和Linux应用程序的库,从移植而来。 Turf for Swift是试验性的,其公共API可能会发生变化。 如果您发现任何问题或缺少应添加的功能,请谨慎使用并解决未解决的问题...
  • WebViewJavascriptBridge:OC与H5的交互,里面标注很详细
  • 目录网页端的js给手机端发js方法的代码格式:swift端接收js方法需要做的事给WKWebView添加要捕获js的方法名捕获js方法swift端接收js的alert遵守WKUIDelegate设置代理在代理方法里面写入接收alert的后续代码swift 执行...

    今天做公司项目网页程序里面调用手机的截图.跟公司网页端的同事合作完成了功能.

    网页端的js给手机端发js方法的代码格式:

    可以直接把下面代码复制给你的前端同事

    try {
        //使用此方法,会报错,因此使用try-catch
        window.webkit.messageHandlers.方法名.postMessage(发送的消息内容);
    } catch(error) {
        console.log('WKWebView post message');
    }
    
    

    例如下面自定义的方法"screenShotCellphone",发送的消息是"1"

    
    try {
        //使用此方法,会报错,因此使用try-catch
        window.webkit.messageHandlers.screenShotCellphone.postMessage("1");
    } catch(error) {
        console.log('WKWebView post message');
    }
    

    swift端接收js方法需要做的事

    给WKWebView添加要捕获js的方法名

    如果不添加方法名,下面的代理方法就不能够捕捉到
    下面方法在控制器执行一次就行了,放在WKWebView初始化后面,下面添加的方法名字是自定义的js方法screenShotCellphone

    wkWebView.configuration.userContentController.add(self, name: "screenShotCellphone") //添加js需要检测的方法
    

    捕获js方法

    让控制器遵守协议WKScriptMessageHandler
    例如让ViewController遵守协议,写成扩展,当网页里面发送js的screenShotCellphone 方法的时候下面就会被调用.message.name是捕获方法名,message.body是捕获到的方法发送的信息

    extension ViewController: WKScriptMessageHandler{
        //userContentController的协议方法:JS调用OC和swift 时会执行此方法
        //   userContentController  webview中配置的userContentController 信息
        //    @param message                JS执行传递的消息
        func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
            //需要用wkWebView.configuration.userContentController.add 添加被检测的方法名字
            print("message=",message)
            print("message.webView=",message.webView)
            print("message.frameInfo=",message.frameInfo)
            print("message.name=",message.name) //方法名  得到"screenShotCellphone"
            print("message.body=",message.body) //参数 ,得到"1"
            
        }
    
    

    swift端接收js的alert

    遵守WKUIDelegate设置代理

    wkWebView.uiDelegate = self
    

    在代理方法里面写入接收alert的后续代码

    注意,接收到alert以后必须调用completionHandler()方法,否则会报错,一般在点击完 “确定” 或者 "否"按钮以后调用这个方法,告诉系统已经点击完按钮了
    下面代码 message是 js传过来的alert信息 runJavaScriptAlertPanelWithMessage是系统的代理方法

    extension ViewController : WKUIDelegate{
        //网页alter信息
        func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) {
            
            print("message=",message)
    		//这里写你自己的ios alert方法,我的alert方法是自己封装的就不在这里写了
            completionHandler()// js的alert方法必须调用ios的completionHandler方法,否则报错
    
        }
    }
    

    swift 执行 js.open方法打开新窗口

    当网页里面打开新的网页的时候,需要把WKWebView 用load方法再打开新的url.需要下面方法捕获到 js.open方法以后,再继续打开新网页

    遵守WKUIDelegate代理

    wkWebView.uiDelegate = self
    

    重写代理方法,并且打开新的url

    下面代码看着比较长,实际上核心内容就是一句 wkWebView.load(URLRequest(url: url)),就是让wkWebView打开新的网址,其他都是判断

    extension ViewController : WKUIDelegate
        //用来接收 js的open方法
        //打开新网页的时候调用下面方法
        func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
    
            if navigationAction.request.url != nil {
                let url = navigationAction.request.url
                if let urlPath = url?.absoluteString {
                    print("urlPath=",urlPath)
                    if (urlPath as NSString?)?.range(of: "https://").location != NSNotFound || (urlPath as NSString?)?.range(of: "http://").location != NSNotFound {
                        //如果找到https://或者 http://就打开网页
                        if let url = URL(string: urlPath ) {
                            wkWebView.load(URLRequest(url: url))
                        }
                    }
                }
            }
            return nil
        }
    }
    

    直接用swift执行js

    evaluateJavaScript方法可以直接执行js语句

    例如下面代码是通过执行js,禁用WKWebView的缩放手势

     let javascript = "var meta = document.createElement('meta');meta.setAttribute('name', 'viewport');meta.setAttribute('content', 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no');document.getElementsByTagName('head')[0].appendChild(meta);"
     webView.evaluateJavaScript(javascript, completionHandler: nil)
    
    
    展开全文
  • swift 开发UIWebView跟JS的交互

    千次阅读 2017-09-25 11:29:37
    作为小白的我,才开始入门IOS,选择了swift来进行入门学习,学习做着公司一个简单的小小项目,该项目需要进行跟H5进行交互,然后我就开始研究了UIWebView的使用,其实基本原理跟Android的一样,因为我是Android开发...
  • 1.创建wkwebview import WebKit lazy var webView: ... preferences.javaScriptEnabled = true let configuration = WKWebViewConfiguration() configuration.preferences = preferences configuration.user
  • 一分钟学会swift里WKWebView与javaScript的简单交互
  • jsswift互调

    2017-06-16 17:11:39
    jsswift互调
  • swiftJS交互

    2016-08-17 15:27:10
    swift版使用wkwebview与JS交互
  • 使用:安装命令行工具:npm install --g shift.js转译一个单独的Swift文件到JavaScript文件shift.js someSwiftFile.swift查看文件变化shift.js -w someSwiftFile.swift帮助命令shift.js -h 标签:...
  • SwiftUI(WIP)的图形库GraphKit(WIP)SwiftUI的图形库现在寻求贡献者这里的最终目标是随着时间的推移慢慢提供与D3.js类似的功能,但在Swift软件包中,可以通过Swift软件包管理器轻松安装。您想关注这个项目的发展...
  • 迅捷的骗子 伪造的用户生成器。 受启发(如:从中复制了大量数据) var fakeGuy = Faker () print (fakeGuy....print (fakeGuy....print (fakeGuy....print (fakeGuy....print (fakeGuy....print (fakeGuy....print (fakeGuy....
  • Apple在北京时间2014年6月3日凌晨发布了iOS8。这次更新在界面上看上去几乎没有修改,不过对于开发者,iOS8...本资源使用SWIFT实现了JS调用本地代码的2中方式,第二种方式是iOS8的新增SDK 本资源在XCode 6 beta 5中开发
  • JSPatch 可以让你用 JavaScript 书写原生 iOS APP。只需在项目引入极小的引擎,就可以使用 JavaScript 调用任何 Objective-C 的原生接口,获得脚本语言的优势:为项目动态添加模块,或替换项目原生代码动态修复 bug...
  • HighlightJS-Swift:Highlight.js CSSJS资源打包为Swift Package Manager软件包
  • 在本文中,他介绍了在Swift中使用JavaScript的方法和技巧,对于iOS和Web工程师有着非常实用的价值。本文作者NateCook是一位独立的Web及移动应用开发者,是继Mattt大神之后NSHipster的主要维护者,也是非常知名活跃的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,858
精华内容 10,743
关键字:

js switf