鴻蒙 ~web組件 runJavaScript()苟翻、javaScriptProxy() 簡單使用

一、應(yīng)用側(cè)調(diào)用前端頁面函數(shù) 使用 runJavaScript()

二骗污、前端頁面調(diào)用應(yīng)用側(cè)函數(shù)

注冊應(yīng)用側(cè)代碼有兩種方式崇猫,

  • 一種在Web組件初始化使用調(diào)用,使用[javaScriptProxy()
  • 另外一種在Web組件初始化完成后調(diào)用需忿,使用registerjavascriptproxy()接口(注意:使用registerJavaScriptProxy()接口注冊方法時诅炉,注冊后需調(diào)用refresh()接口生效)

三、代碼 : ets 代碼(已編譯通過贴谎,可運(yùn)行)


import web_webview from '@ohos.web.webview';

const TAG = "huxiubo"

@Entry
@Component
struct Mainindex {
  @State count : number = 0;
  // 定義Web組件的控制器controller
  webviewController: web_webview.WebviewController = new web_webview.WebviewController();

  // js中回調(diào) etc 方法
  contentCall = {
    callbackOne : () =>{
      this.count+=1;
      console.log(TAG, 'callbackOne success')
    },
    callbackTwo : () =>{
      this.count-=1;
      console.log(TAG, 'callbackTwo success')
    }
  }

  build() {
    Column({space:12}) {
      Text(`js修改ets屬性text: ${this.count}`)
        .fontSize(25)

      Button('ets調(diào)用js方法改變text值+1')
        .fontSize(25)
        .onClick(()=>{
          //調(diào)用js方法
          this.webviewController.runJavaScript("change_text_add()")
        })

      Button('ets調(diào)用js方法改變text值-1')
        .fontSize(25)
        .onClick(()=>{
          //調(diào)用js方法
          this.webviewController.runJavaScript("change_text_reduce()")
        })

      Button('ets調(diào)用js方法改變web顯示')
        .fontSize(25)
        .onClick(()=>{
          this.webviewController.runJavaScript("change_html_context('"+this.count+"')")
        })

      Web({ src: $rawfile('index.html'), controller: this.webviewController })
        .fileAccess(true)
        .javaScriptAccess(true)
        .zoomAccess(true)
        .imageAccess(true)
        .height(500)
        .padding(20)
          //注入JavaScript對象到window對象中汞扎,并在window對象中調(diào)用該對象的方法
        .javaScriptProxy({
          object : this.contentCall,
          name : "callBackToApp",
          methodList : ["callbackOne","callbackTwo"],
          controller : this.webviewController
        })
    }
  }
}

HTML 代碼, 需要把index.html 放入對應(yīng)模塊 resources->rawfile 目錄中

<!DOCTYPE html>
<html>
<body>
Hello world!
<div id="indexjs" contenteditable="true"></div>
<script>

    var INDEX = {};

    INDEX.editor = document.getElementById('indexjs'); //獲取html中元素

    INDEX.setHtml = function(contents) {
        INDEX.editor.innerHTML = contents; //給id=“indexjs”的div元素賦值
    }

    function change_html_context(contents) {
        INDEX.setHtml(contents);
    }

    //ets調(diào)用js方法,間接回調(diào)ets的方法
    function change_text_add() {
        console.log('change_text_add start');
        var str = callBackToApp.callbackOne(); //js調(diào)用ets方法擅这,實現(xiàn)ets訪問
        console.log('change_text_add end');
    }

    //ets調(diào)用js方法澈魄,間接回調(diào)ets的方法
    function change_text_reduce() {
        console.log('change_text_reduce start');
        var str = callBackToApp.callbackTwo(); //js調(diào)用ets方法,實現(xiàn)ets訪問
        console.log('change_text_reduce end');
    }
</script>
</body>
</html>

四 官網(wǎng) 例子

ets

import web_webview from '@ohos.web.webview';

const TAG = "huxiubo"
class testClass {
  constructor() {
  }

  test(): string {
    console.info(TAG, `hxuibuo`);
    return 'ArkTS Hello World!';
  }
}

@Entry
@Component
struct WebComponent {
  webviewController: web_webview.WebviewController = new web_webview.WebviewController();
  // 聲明需要注冊的對象
  @State testObj: testClass = new testClass();

  build() {
    Column({space: 20}) {
      Button("huxiubo")
      // web組件加載本地index.html頁面
      Web({ src: $rawfile('index.html'), controller: this.webviewController})
        // 將對象注入到web端
        .javaScriptProxy({
          object: this.testObj,
          name: "testObjName",
          methodList: ["test"],
          controller: this.webviewController
        })
    }
  }
}

html

<!DOCTYPE html>
<html>
<body>
<button type="button" onclick="callArkTS()">Click Me!</button>
<p id="demo"></p>
<script>
    function callArkTS() {
        let str = testObjName.test();
        document.getElementById("demo").innerHTML = str;
        console.info('ArkTS Hello World! :' + str);
    }
</script>
</body>
</html>

注意:其中 ets 中 name: "testObjName", 需要和 HTML 中 let str = testObjName.test(); 一致仲翎,
官網(wǎng)上不一致

五 注意點

本地模擬上HTML button 不能點擊痹扇,需要真實手機(jī)、遠(yuǎn)程模擬器溯香、遠(yuǎn)程真機(jī)測試

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鲫构,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子玫坛,更是在濱河造成了極大的恐慌结笨,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件湿镀,死亡現(xiàn)場離奇詭異炕吸,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)勉痴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門赫模,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蒸矛,你說我怎么就攤上這事瀑罗⌒刈欤” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵斩祭,是天一觀的道長劣像。 經(jīng)常有香客問我,道長停忿,這世上最難降的妖魔是什么驾讲? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮席赂,結(jié)果婚禮上吮铭,老公的妹妹穿的比我還像新娘。我一直安慰自己颅停,他們只是感情好谓晌,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著癞揉,像睡著了一般纸肉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上喊熟,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天柏肪,我揣著相機(jī)與錄音,去河邊找鬼芥牌。 笑死烦味,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的壁拉。 我是一名探鬼主播谬俄,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼弃理!你這毒婦竟也來了溃论?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤痘昌,失蹤者是張志新(化名)和其女友劉穎钥勋,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辆苔,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡笔诵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了姑子。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡测僵,死狀恐怖街佑,靈堂內(nèi)的尸體忽然破棺而出谢翎,到底是詐尸還是另有隱情,我是刑警寧澤沐旨,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布森逮,位于F島的核電站,受9級特大地震影響磁携,放射性物質(zhì)發(fā)生泄漏褒侧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一谊迄、第九天 我趴在偏房一處隱蔽的房頂上張望闷供。 院中可真熱鬧,春花似錦统诺、人聲如沸歪脏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽婿失。三九已至,卻和暖如春啄寡,著一層夾襖步出監(jiān)牢的瞬間豪硅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工挺物, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留懒浮,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓姻乓,卻偏偏與公主長得像嵌溢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蹋岩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容