Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
mockDataFactory
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Android
mockDataFactory
Commits
55513c46
Commit
55513c46
authored
Jul 29, 2020
by
段建华
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Upload New File
parent
e47038b3
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
187 additions
and
0 deletions
+187
-0
jsbridge.js
h5/jsbridge.js
+187
-0
No files found.
h5/jsbridge.js
0 → 100644
View file @
55513c46
//notation: js file can only use this kind of comments
//since comments will cause error when use in webview.loadurl,
//comments will be remove by java use regexp
(
function
()
{
if
(
window
.
WebViewJavascriptBridge
)
{
return
;
}
var
messagingIframe
;
var
bizMessagingIframe
;
var
sendMessageQueue
=
[];
var
receiveMessageQueue
=
[];
var
messageHandlers
=
{};
var
CUSTOM_PROTOCOL_SCHEME
=
'yy'
;
var
QUEUE_HAS_MESSAGE
=
'__QUEUE_MESSAGE__/'
;
var
responseCallbacks
=
{};
var
uniqueId
=
1
;
// 创建消息index队列iframe
function
_createQueueReadyIframe
(
doc
)
{
messagingIframe
=
doc
.
createElement
(
'iframe'
);
messagingIframe
.
style
.
display
=
'block'
;
messagingIframe
.
style
.
background
=
"red"
doc
.
documentElement
.
appendChild
(
messagingIframe
);
console
.
info
(
"createQueueReadyIFrame"
)
}
//创建消息体队列iframe
function
_createQueueReadyIframe4biz
(
doc
)
{
bizMessagingIframe
=
doc
.
createElement
(
'iframe'
);
bizMessagingIframe
.
style
.
display
=
'block'
;
bizMessagingIframe
.
style
.
background
=
"green"
doc
.
documentElement
.
appendChild
(
bizMessagingIframe
);
console
.
info
(
"createQueueReadyIFrame4Biz"
)
}
//set default messageHandler 初始化默认的消息线程
function
init
(
messageHandler
)
{
if
(
WebViewJavascriptBridge
.
_messageHandler
)
{
throw
new
Error
(
'WebViewJavascriptBridge.init called twice'
);
}
WebViewJavascriptBridge
.
_messageHandler
=
messageHandler
;
var
receivedMessages
=
receiveMessageQueue
;
receiveMessageQueue
=
null
;
console
.
log
(
"init receivedMessages.length"
+
(
receivedMessages
.
length
))
for
(
var
i
=
0
;
i
<
receivedMessages
.
length
;
i
++
)
{
_dispatchMessageFromNative
(
receivedMessages
[
i
]);
}
}
// 发送
function
send
(
data
,
responseCallback
)
{
_doSend
({
data
:
data
},
responseCallback
);
}
// 注册线程 往数组里面添加值
function
registerHandler
(
handlerName
,
handler
)
{
messageHandlers
[
handlerName
]
=
handler
;
}
// 调用线程
function
callHandler
(
handlerName
,
data
,
responseCallback
)
{
console
.
info
(
"callHandler handleName="
+
handlerName
+
";data="
+
JSON
.
stringify
(
data
));
_doSend
({
handlerName
:
handlerName
,
data
:
data
},
responseCallback
);
}
function
_runBridgeHandler
(
handlerName
)
{
var
handler
=
messageHandlers
[
handlerName
];
if
(
handler
)
{
handler
();
}
}
function
_runBridgeHandlerWithOneParameter
(
handlerName
,
parameter
)
{
var
handler
=
messageHandlers
[
handlerName
];
if
(
handler
)
{
handler
(
parameter
);
}
}
//sendMessage add message, 触发native处理 sendMessage
function
_doSend
(
message
,
responseCallback
)
{
if
(
responseCallback
)
{
var
callbackId
=
'cb_'
+
(
uniqueId
++
)
+
'_'
+
new
Date
().
getTime
();
responseCallbacks
[
callbackId
]
=
responseCallback
;
message
.
callbackId
=
callbackId
;
}
console
.
info
(
"_doSend message="
+
JSON
.
stringify
(
message
)
+
";callbackId="
+
message
.
callbackId
);
sendMessageQueue
.
push
(
message
);
messagingIframe
.
src
=
CUSTOM_PROTOCOL_SCHEME
+
'://'
+
QUEUE_HAS_MESSAGE
;
console
.
info
(
"_doSend set messagingUrl="
+
(
messagingIframe
.
src
))
}
// 提供给native调用,该函数作用:获取sendMessageQueue返回给native,由于android不能直接获取返回的内容,所以使用url shouldOverrideUrlLoading 的方式返回内容
function
_fetchQueue
()
{
console
.
log
(
"_fetchQueue start"
)
if
(
sendMessageQueue
.
length
==
0
)
return
;
var
messageQueueString
=
JSON
.
stringify
(
sendMessageQueue
);
sendMessageQueue
=
[];
console
.
log
(
"_fetchQueue messageQueued="
+
messageQueueString
);
//android can't read directly the return data, so we can reload iframe src to communicate with java
bizMessagingIframe
.
src
=
CUSTOM_PROTOCOL_SCHEME
+
'://return/_fetchQueue/'
+
encodeURIComponent
(
messageQueueString
);
console
.
log
(
"_fetchQueue set bizMessagingIframe"
)
}
//提供给native使用,
function
_dispatchMessageFromNative
(
messageJSON
)
{
console
.
log
(
"_dispatchMessageFromNative json="
+
JSON
.
stringify
(
messageJSON
))
setTimeout
(
function
()
{
var
message
=
JSON
.
parse
(
messageJSON
);
var
responseCallback
;
//java call finished, now need to call js callback function
if
(
message
.
responseId
)
{
console
.
info
(
"_dispatchMessageFromNative the java side has finished the work"
);
responseCallback
=
responseCallbacks
[
message
.
responseId
];
if
(
!
responseCallback
)
{
return
;
}
var
responseData
=
message
.
responseData
;
if
(
typeof
responseData
==
'string'
)
{
responseData
=
JSON
.
parse
(
responseData
);
}
responseCallback
(
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
];
}
//查找指定handler
try
{
handler
(
message
.
data
,
responseCallback
);
}
catch
(
exception
)
{
if
(
typeof
console
!=
'undefined'
)
{
console
.
log
(
"WebViewJavascriptBridge: WARNING: javascript handler threw."
,
message
,
exception
);
}
}
}
});
}
//提供给native调用,receiveMessageQueue 在会在页面加载完后赋值为null,所以
function
_handleMessageFromNative
(
messageJSON
)
{
console
.
log
(
'_handleMessageFromNative:'
+
JSON
.
stringify
(
messageJSON
));
if
(
receiveMessageQueue
)
{
receiveMessageQueue
.
push
(
messageJSON
);
console
.
log
(
'_handleMessageFromNative pushed into receiveMessageQueue'
);
}
_dispatchMessageFromNative
(
messageJSON
);
}
var
WebViewJavascriptBridge
=
window
.
WebViewJavascriptBridge
=
{
init
:
init
,
send
:
send
,
registerHandler
:
registerHandler
,
callHandler
:
callHandler
,
_fetchQueue
:
_fetchQueue
,
_handleMessageFromNative
:
_handleMessageFromNative
,
_runBridgeHandler
:
_runBridgeHandler
,
_runBridgeHandlerWithOneParameter
:
_runBridgeHandlerWithOneParameter
};
var
doc
=
document
;
_createQueueReadyIframe
(
doc
);
_createQueueReadyIframe4biz
(
doc
);
var
readyEvent
=
doc
.
createEvent
(
'Events'
);
readyEvent
.
initEvent
(
'WebViewJavascriptBridgeReady'
);
readyEvent
.
bridge
=
WebViewJavascriptBridge
;
doc
.
dispatchEvent
(
readyEvent
);
})();
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment