[sketch plugin]如何寫一個可交互的webView界面(二)

上篇文章我們已經(jīng)創(chuàng)建了一個webView界面贯被,現(xiàn)在我們來看下如何使webView與sketch交互沟于。
window 對象可以取得網(wǎng)頁里頭所有的 JS 函數(shù)與對象咳胃,而如果我們把一個 OC 對象設定成 windowScriptObject 的 value,JS 也便可以調用OC對象的 method旷太。于是展懈,我們可以在Objective-C 程序里頭要求 WebView 執(zhí)行一段 JS,也可以反過來讓 JS 調用一段OC供璧。
為此我們首先引用一個MochaJSDelegate.js:
https://github.com/matt-curtis/MochaJSDelegate
MochaJSDelegate是一種用CocoaScript編寫的腳本存崖,來創(chuàng)建委托以供本機AppKit / UIKit類使用的方法。

@import "MochaJSDelegate.js";

"webView:didFinishLoadForFrame:"是用于監(jiān)聽webView是否加載完畢睡毒。
windowObject.evaluateWebScript("updatePreview()");則是可以執(zhí)行webView中的函數(shù)updatePreview()来惧。

// 創(chuàng)建delegate
  var delegate = new MochaJSDelegate({

    // 監(jiān)聽webView是否加載完畢
    "webView:didFinishLoadForFrame:": (function(webView, webFrame) {
        var selection = context.selection;
        log(selection);
        var textCSS = getSpacings(selection);
        log("textCSS:" + textCSS);
        // 調用webView中的函數(shù),更新頁面的數(shù)據(jù)展示
        windowObject.evaluateWebScript("updatePreview('" + textCSS + "')");
    })
  })

  // Set the delegate on the WebView
  webView.setFrameLoadDelegate_(delegate.getClassInstance());

由此便可以在oc中調用webView里的js演顾。
那么我們在sketch中有很多操作事件供搀,而我們希望能監(jiān)聽這些事件,并調用webView里的函數(shù)钠至。則可以用到Actions:一個Sketch API葛虐,它允許我們在Sketch中基于事件執(zhí)行代碼。一些action(如SelectionChanged)實際上發(fā)生在兩個階段:begin和finish棉钧。如果只想在其中一個上調用函數(shù)屿脐,可以給SelectionChanged.begin,或SelectionChanged.finish添加處理函數(shù)宪卿。更多actions可以看https://developer.sketchapp.com/reference/action/
這時我們在插件的manifest.json中這樣寫:

"handlers": {
  "run": "onRun",
  "actions": {
    "SelectionChanged.finish": "onSelectionChanged",
  }
}

表示當更改選擇結束時的诵,執(zhí)行onSelectionChanged這個函數(shù),接下來我們在onRun下寫該函數(shù)愧捕。跟前面一樣的方式來調用webView里js奢驯,這里不贅述詳細請看代碼。

var onSelectionChanged = function(context) {
  var threadDictionary = NSThread.mainThread().threadDictionary();
  var identifier = "co.getstyle";
  
  //看是否存在了panel
  if (threadDictionary[identifier]) {
    var panel = threadDictionary[identifier];

    // 獲取已有的panel的webView
    var webView = panel.contentView().subviews()[1];
    var windowObject = webView.windowScriptObject();

    // 獲取選擇的圖層次绘,并處理
    var selection = context.actionContext.document.selectedLayers().layers();    
    var textCSS = getSpacings(selection);
   // 執(zhí)行webView中的函數(shù)updatePreview
    windowObject.evaluateWebScript("updatePreview('" + textCSS + "')");
    
  }
};

如此瘪阁,一個可與sketch交互的webView界面就完成了。
完整的demo代碼可以看這里https://github.com/lulu0729/getStyle/blob/master/getStyle.sketchplugin/Contents/Sketch/main.cocoascript

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末邮偎,一起剝皮案震驚了整個濱河市管跺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌禾进,老刑警劉巖豁跑,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異泻云,居然都是意外死亡艇拍,警方通過查閱死者的電腦和手機狐蜕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來卸夕,“玉大人层释,你說我怎么就攤上這事】旒” “怎么了贡羔?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長个初。 經(jīng)常有香客問我乖寒,道長,這世上最難降的妖魔是什么院溺? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任楣嘁,我火速辦了婚禮,結果婚禮上覆获,老公的妹妹穿的比我還像新娘马澈。我一直安慰自己,他們只是感情好弄息,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布痊班。 她就那樣靜靜地躺著,像睡著了一般摹量。 火紅的嫁衣襯著肌膚如雪涤伐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天缨称,我揣著相機與錄音凝果,去河邊找鬼。 笑死睦尽,一個胖子當著我的面吹牛器净,可吹牛的內容都是我干的。 我是一名探鬼主播当凡,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼山害,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了沿量?” 一聲冷哼從身側響起浪慌,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎朴则,沒想到半個月后权纤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年汹想,在試婚紗的時候發(fā)現(xiàn)自己被綠了外邓。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡欧宜,死狀恐怖坐榆,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情冗茸,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布匹中,位于F島的核電站夏漱,受9級特大地震影響,放射性物質發(fā)生泄漏顶捷。R本人自食惡果不足惜挂绰,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望服赎。 院中可真熱鬧葵蒂,春花似錦、人聲如沸重虑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缺厉。三九已至永高,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間提针,已是汗流浹背命爬。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留辐脖,地道東北人饲宛。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像嗜价,于是被迫代替她去往敵國和親艇抠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內容