【5+】webviewにまたがるマルチページトリガイベント(一)
5963 ワード
日常的な漫画の机能の中で、多くの情况はすべて通知のページを使う必要があって、muiは私达にすでに内蔵して书いて、当当当、muiです.Fire前に書いた使い方を見てみましょう
Mui公式文書 【MUI】webviewにまたがるマルチページトリガイベント えっ?この时、子供靴があると闻きます.どうしたんですか.前にmuiを书いたのではありません.fireの文章はありますか?どうしてまたこの編があったの?ははは、この文章は主に5+の実現案を説明して、muiを使わない.Fireは、自分で通知を書くjs機能に相当し、その原理をよりよく理解させ、muiを使わなければならないだけでなく、より良いことに拘束する.js
キーワード plus.webview.evalJS dispatchEvent
Bページ通知Aページでは、通知Aページの内容にかかわらず、Bページにコードを呼び出して、Aページにalertをポップアップさせることを望んでいます.このとき、webviewのevalJSメソッドを使用します.
A.html
B.html
では、どのようにしてAポップアップボックスを通知することができますか?キーワードに言及したplusを使う必要があります.webview.evalJSへへへへ、BはAのWebviewオブジェクトを取得し、evalJSを通じてAページにコードを送信して実行させます.
ボタンをクリックすると、案の定、私たちのポップアップボックスが表示されます.もちろん、他の関数を定義して応答を受信することもできます.
A
B
もちろん、Aページはfaqme関数を実行して、弾いておとなしく立って良いです
実はFireの内部実装はその原理ですコードを見てみましょう
このdispatchEventは何ですか?この方法はdomイベントに関する詳細なドキュメントをトリガするために使用されると理解できます:イベントトリガ---dispatchEvent
これは筋道がはっきりしている.Aページカスタムイベント=>BページAページイベントコールバックをトリガーして参照
へへへ、こんなに简単で、しかしこの文章はまだ终わっていないで、すべてここに着いた以上、いっそ私达は自分でこの通知机能をカプセル化しましょう!
私たちは新しいファイルを作りました.名前はBroadcastです.jsここではES 6 Classで書きます
まず、最も基本的な2つの機能を実現します.リスニングイベント(購読) トリガイベント(パブリッシュ)
OKページで引用して使ってみましょう
A
B
Bページのボタンをクリック
ワハハ、基础机能はすでにどのように実现して、もちろん、これはただ最も基础的な监视を実现して、触発して、后で更に多くの最适化が必要で、および管理して、辛いですか、下章は见ます
次の章:【5+】webviewにまたがるマルチページトリガイベント(二)
mui.fire
原理の紹介
キーワード
Bページ通知Aページでは、通知Aページの内容にかかわらず、Bページにコードを呼び出して、Aページにalertをポップアップさせることを望んでいます.このとき、webviewのevalJSメソッドを使用します.
A.html
Aページです
mui.init()
mui.plusReady(function(){
document.querySelector("button").addEventListener('tap',function(){
mui.openWindow('B.html')
})
})
B.html
Bページです
mui.init()
mui.plusReady(function(){
document.querySelector("button").addEventListener('tap',function(){
// A
})
})
では、どのようにしてAポップアップボックスを通知することができますか?キーワードに言及したplusを使う必要があります.webview.evalJSへへへへ、BはAのWebviewオブジェクトを取得し、evalJSを通じてAページにコードを送信して実行させます.
// A
var A = plus.webview.getLaunchWebview()
A.evalJS('alert(" B ")')
ボタンをクリックすると、案の定、私たちのポップアップボックスが表示されます.もちろん、他の関数を定義して応答を受信することもできます.
A
function faqme(){
alert(' , !')
}
B
// A
var A = plus.webview.getLaunchWebview()
A.evalJS('faqme()')
もちろん、Aページはfaqme関数を実行して、弾いておとなしく立って良いです
実はFireの内部実装はその原理ですコードを見てみましょう
このdispatchEventは何ですか?この方法はdomイベントに関する詳細なドキュメントをトリガするために使用されると理解できます:イベントトリガ---dispatchEvent
これは筋道がはっきりしている.Aページカスタムイベント=>BページAページイベントコールバックをトリガーして参照
へへへ、こんなに简単で、しかしこの文章はまだ终わっていないで、すべてここに着いた以上、いっそ私达は自分でこの通知机能をカプセル化しましょう!
車輪を作る
私たちは新しいファイルを作りました.名前はBroadcastです.jsここではES 6 Classで書きます
//
class Broadcast{
/**
*
*/
constructor(){
}
}
まず、最も基本的な2つの機能を実現します.
//
class Broadcast{
/**
*
*/
constructor(){
}
/**
*
* @param {String} eventName
* @param {Function} callback
* @return {Broadcast} this
*/
on(eventName, callback){
document.addEventListener(eventName, e => {
callback.call(e, e.detail)
})
return this
}
/**
*
* @param {String} eventName
* @param {Object} data
* @return {Broadcast} this
*/
emit(eventName, data){
// webview
var all = plus.webview.all()
//
for(var w in all){
// evalJS
all[w].evalJS(`document.dispatchEvent(new CustomEvent('${eventName}', {
detail:JSON.parse('${JSON.stringify(data)}'),
bubbles: true,
cancelable: true
}));`)
}
return this
}
}
OKページで引用して使ってみましょう
A
Aページです
mui.init()
mui.plusReady(function(){
document.querySelector("button").addEventListener('tap',function(){
mui.openWindow('B.html')
})
})
new Broadcast().on('say', function(data){
alert(JSON.stringify(data))
})
B
Bページです
mui.init()
mui.plusReady(function(){
document.querySelector("button").addEventListener('tap',function(){
// A
//var A = plus.webview.getLaunchWebview()
//A.evalJS('alert(" B ")')
new Broadcast().emit('say', {
from: ' B ',
id: 666
})
})
})
Bページのボタンをクリック
ワハハ、基础机能はすでにどのように実现して、もちろん、これはただ最も基础的な监视を実现して、触発して、后で更に多くの最适化が必要で、および管理して、辛いですか、下章は见ます
次の章:【5+】webviewにまたがるマルチページトリガイベント(二)
class Man{
constructor(){
this.name = 'NewsNing'
}
say(){
console.log(' , . ')
}
}