;(function() {
if (window.WebViewJavascriptBridge) { return }
var messagingIframe
var sendMessageQueue = []
var receiveMessageQueue = []
var messageHandlers = {}
var CUSTOM_PROTOCOL_SCHEME = 'wvjbscheme'
var QUEUE_HAS_MESSAGE = '__WVJB_QUEUE_MESSAGE__'
var responseCallbacks = {}
var uniqueId = 1
function _createQueueReadyIframe(doc) {
messagingIframe = doc.createElement('iframe')
messagingIframe.style.display = 'none'
messagingIframe.src = CUSTOM_PROTOCOL_SCHEME + '://' + QUEUE_HAS_MESSAGE
doc.documentElement.appendChild(messagingIframe)
}
function init(messageHandler) {
if (WebViewJavascriptBridge._messageHandler) { throw new Error('WebViewJavascriptBridge.init called twice') }
WebViewJavascriptBridge._messageHandler = messageHandler
var receivedMessages = receiveMessageQueue
receiveMessageQueue = null
for (var i=0; i<receivedMessages.length; i++) {
_dispatchMessageFromObjC(receivedMessages[i])
}
}
function send(data, responseCallback) {
_doSend({ data:data }, responseCallback)
}
function registerHandler(handlerName, handler) {
messageHandlers[handlerName] = handler
}
function callHandler(handlerName, data, responseCallback) {
_doSend({ handlerName:handlerName, data:data }, responseCallback)
}
function _doSend(message, responseCallback) {
if (responseCallback) {
var callbackId = 'cb_'+(uniqueId++)+'_'+new Date().getTime()
responseCallbacks[callbackId] = responseCallback
message['callbackId'] = callbackId
}
sendMessageQueue.push(message)
messagingIframe.src = CUSTOM_PROTOCOL_SCHEME + '://' + QUEUE_HAS_MESSAGE
}
function _fetchQueue() {
var messageQueueString = JSON.stringify(sendMessageQueue)
sendMessageQueue = []
return messageQueueString
}
function _dispatchMessageFromObjC(messageJSON) {
setTimeout(function _timeoutDispatchMessageFromObjC() {
var message = JSON.parse(messageJSON)
var messageHandler
var responseCallback
if (message.responseId) {
responseCallback = responseCallbacks[message.responseId]
if (!responseCallback) { return; }
responseCallback(message.responseData)
delete responseCallbacks[message.responseId]
} else {
if (message.callbackId) {
var callbackResponseId = message.callbackId
responseCallback = function(responseData) {
_doSend({ responseId:callbackResponseId, responseData:responseData })
}
}
var handler = WebViewJavascriptBridge._messageHandler
if (message.handlerName) {
handler = messageHandlers[message.handlerName]
}
try {
handler(message.data, responseCallback)
} catch(exception) {
if (typeof console != 'undefined') {
console.log("WebViewJavascriptBridge: WARNING: javascript handler threw.", message, exception)
}
}
}
})
}
function _handleMessageFromObjC(messageJSON) {
if (receiveMessageQueue) {
receiveMessageQueue.push(messageJSON)
} else {
_dispatchMessageFromObjC(messageJSON)
}
}
window.WebViewJavascriptBridge = {
init: init,
send: send,
registerHandler: registerHandler,
callHandler: callHandler,
_fetchQueue: _fetchQueue,
_handleMessageFromObjC: _handleMessageFromObjC
}
var doc = document
_createQueueReadyIframe(doc)
var readyEvent = doc.createEvent('Events')
readyEvent.initEvent('WebViewJavascriptBridgeReady')
readyEvent.bridge = WebViewJavascriptBridge
doc.dispatchEvent(readyEvent)
})();
没有合适的资源?快使用搜索试试~ 我知道了~
UIWebView与 javascript的交互
共24个文件
m:5个
h:3个
plist:3个
需积分: 14 31 下载量 63 浏览量
2015-04-21
17:12:05
上传
评论
收藏 41KB ZIP 举报
温馨提示
一个简单的demo实现了对html页面上简单事件的响应,但是没有实现获取输入的值
资源推荐
资源详情
资源评论
收起资源包目录
HTML5Demo.zip (24个子文件)
HTML5Demo
.DS_Store 6KB
HTML5Demo
WebViewJavascriptBridge
WebViewJavascriptBridge.h 2KB
WebViewJavascriptBridge.m 15KB
WebViewJavascriptBridge.js.txt 3KB
ViewController.m 2KB
Info.plist 1KB
main.m 327B
test.js 92B
Base.lproj
Main.storyboard 2KB
LaunchScreen.xib 4KB
Images.xcassets
AppIcon.appiconset
Contents.json 585B
ViewController.h 278B
AppDelegate.h 270B
test.html 726B
AppDelegate.m 2KB
HTML5Demo.xcodeproj
project.xcworkspace
xcshareddata
HTML5Demo.xccheckout 3KB
contents.xcworkspacedata 154B
xcuserdata
jack.xcuserdatad
UserInterfaceState.xcuserstate 18KB
xcuserdata
jack.xcuserdatad
xcdebugger
Breakpoints_v2.xcbkptlist 1KB
xcschemes
HTML5Demo.xcscheme 4KB
xcschememanagement.plist 571B
project.pbxproj 18KB
HTML5DemoTests
Info.plist 742B
HTML5DemoTests.m 858B
共 24 条
- 1
资源评论
JackLee18
- 粉丝: 396
- 资源: 51
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功