IOS APP 开发 swift 中 UIWebView 与 javascript 的交互

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IOS APP 开发 swift 中 UIWebView 与 javascript 的交互相关的知识,希望对你有一定的参考价值。

两个问题:
1、JS 中怎么调用 swift 开发的 ios 程序的方法或类

2、如何重载 swift 中的 UIWebView 的各种事件???

俺找了好久没找到相关资料,亲们有知道的告诉我一声呀,如果需要报酬的,加我Q 8663843,感激不尽!
就看在俺帮了那么多人的情况下,帮帮俺吧,刚学 swift 不久,不了解这东东。
以后俺会在其他领域帮助其他人的,比如 .net,jsp,andriod,php 啥的。。。感激不尽。

实现委托,重载就行


class ViewController:UIWebViewDelegate  //这样就实现了委托,然后重载方法


 func webView(webView: UIWebView!, shouldStartLoadWithRequest request: NSURLRequest!, navigationType: UIWebViewNavigationType) -> Bool 
        return true
    
    
    func webViewDidStartLoad(webView: UIWebView!) 
        
    

func webViewDidFinishLoad(webView: UIWebView!) 
        
        //执行 js放在这里
        stringByEvaluatingjavascriptFromString("alter('hello')")
    

追问

我自己找到了方法。用 WKWebView 就行了。

不过,WKWebView 中又没有了 stringByEvaluatingJavaScriptFromString ...真是蛋疼。

UIWebView 可以重载 webView ,通过 request.URL 来实现调用。但是不能返回值。。。

感谢。。。。

追答

WKWebView是 ios8才增加的,方式已经有变化了!

参考技术A swift中的UIWebView可以通过WebviewJavaScriptBridge和OVGap跟js交互,这两个库都是让webview与JS建立起一条桥梁,这样就可以相互通信了。
通信例子:

function connectWebViewJavascriptBridge(callback)
if (window.WebViewJavascriptBridge)
callback(WebViewJavascriptBridge)
else
document.addEventListener('WebViewJavascriptBridgeReady', function()
callback(WebViewJavascriptBridge)
, false)



connectWebViewJavascriptBridge(function(bridge)
var uniqueId = 1
function log(message, data)
var log = document.getElementById('log')
var el = document.createElement('div')
el.className = 'logLine'
el.innerhtml = uniqueId++ + '. ' + message + ':<br/>' + JSON.stringify(data)
if (log.children.length) log.insertBefore(el, log.children[0])
else log.appendChild(el)

bridge.init(function(message, responseCallback)
log('JS got a message', message)
var data = 'Javascript Responds':'Wee!'
log('JS responding with', data)
responseCallback(data)
)

bridge.registerHandler('testJavascriptHandler', function(data, responseCallback)
log('ObjC called testJavascriptHandler with', data)
var responseData = 'Javascript Says':'Right back atcha!'
log('JS responding with', responseData)
responseCallback(responseData)
)
var button = document.getElementById('buttons').appendChild(document.createElement('button'))
button.innerHTML = 'Send message to ObjC'
button.onclick = function(e)
e.preventDefault()
var data = 'Hello from JS button'
log('JS sending message', data)
bridge.send(data, function(responseData)
log('JS got response', responseData)
)

document.body.appendChild(document.createElement('br'))
var callbackButton = document.getElementById('buttons').appendChild(document.createElement('button'))
callbackButton.innerHTML = 'Fire testObjcCallback'
callbackButton.onclick = function(e)
e.preventDefault()
log('JS calling handler "testObjcCallback"')
bridge.callHandler('testObjcCallback', 'foo': 'bar', function(response)
log('JS got response', response)
)

)
</script>

以上是关于IOS APP 开发 swift 中 UIWebView 与 javascript 的交互的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发之App主题切换完整解决方案(Swift版)

iOS开发之资讯类App常用分类控件的封装与实现(CollectionView+Swift3.0+)

安卓APP开发与IOS软件开发的区别是啥?

21个高质量的Swift开源iOS App

IOS-App开发常用三方框架整理 (Swift版本)

21个高质量的Swift开源iOS App