Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Vanilla JavaScript はマルチプラットフォームの夢を見るか

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

Vanilla JavaScript はマルチプラットフォームの夢を見るか

Avatar for Mitsuharu Emoto

Mitsuharu Emoto

May 17, 2024
Tweet

More Decks by Mitsuharu Emoto

Other Decks in Programming

Transcript

  1. +4ؔ਺ͷ࣮ߦ w +4$POUFYUͰKTϑΝ ΠϧΛಡΈࠐΉ w ؔ਺໊Λࢦఆͯ͠ɺؔ ਺Λऔಘ࣮ͯ͠ߦ͢Δ w ؔ਺͓Αͼ໭Γ஋͸ +47BMVFͱ͍͏ܕͰ

    ѻ͏ import JavaScriptCore guard let path = Bundle.main.path(forResource: "bundle", ofType: "js"), let contents = try? String(contentsOfFile: path) else { return } let context: JSContext = JSContext(virtualMachine: JSVirtualMachine()) context.evaluateScript(contents) guard let function = context.objectForKeyedSubscript(name: "func_name") else { return } let arguments = ؔ਺ͷҾ਺ʢจࣈɺ਺ࣈɺ഑ྻͳͲ [Any] ͷܕʣ let result = function.call(withArguments: [arguments]) return result 5
  2. ΤϥʔϋϯυϦϯά w +4ϑΝΠϧͷಡΈࠐΈ΍ؔ਺࣮ߦͷΤϥʔ͸εϩʔ͞Εͳ͍ w +4$POUFYUͷΤϥʔϋϯυϦϯάؔ਺ΛཔΓʹݪҼΛ௥ٻͯ͠मਖ਼͢Δ w ஍ຯ͕ͩɺͱͯ΋ॏཁͳϝιουͰ͢ context.exceptionHandler = {

    context, error in guard let error = error, let message = error.toString() else { return } print("JSContext#exceptionHandler Error: \(message)") } 6
  3. 8FCQBDLͰ̍ͭͷϑΝΠϧʹ w ෳ਺ͷϑΝΠϧΛ̍ͭͷϑΝΠϧʹ·ͱΊͯ͘Ε ΔϞδϡʔϧόϯυϥ w ྫ͑͹ɺ#SJEHFͱͳΔJOEFYKTΛ࡞੒ͯ͠ɺͦ ΕΛର৅ʹͯ͠CVOEMFϑΝΠϧΛ࡞੒͢Δ w ઃఆϑΝΠϧXFCQBDLDPO fi

    HKTͳͲॻ͖ํ͸ল ུʢ෇࿥ͷ63-Λݟ͍ͯͩ͘͞ʣ yarn add -D webpack wepback-cli yarn webpack // index.js import hoge from "hoge" import piyo from "piyo" export class Bridge { static hoge(arg) { return hoge(arg) } static piyo(arg) { return piyo(arg) } } 8
  4. Ϟδϡʔϧ࡞੒ޙͷಡΈࠐΈ w όϯυϧϑΝΠϧ͕ϞδϡʔϧԽ͞ΕͨͷͰɺؔ਺औಘ·Ͱͷεςοϓ͕ ૿͕͑ͨɺ͜Ε·Ͱ࢖͍ํͱ͸มΘΒͳ͍ guard let module = context.objectForKeyedSubscript("module_name"), let

    bridge = module.objectForKeyedSubscript("bridge_name"), let function = bridge.objectForKeyedSubscript("function_name") else { return } let arguments = ؔ਺ͷҾ਺ʢจࣈɺ਺ࣈɺ഑ྻͳͲ [Any] ͷܕʣ let result = function.call(withArguments: [arguments]) return result 9