GithubHelp home page GithubHelp logo

kevinwoodhouse / sketch-module-web-view Goto Github PK

View Code? Open in Web Editor NEW

This project forked from skpm/sketch-module-web-view

0.0 2.0 0.0 27 KB

A sketch module for creating an complex UI with a webview

JavaScript 100.00%

sketch-module-web-view's Introduction

sketch-module-web-view

A Sketch module for creating a complex UI with a webview.

Installation

To use this module in your Sketch plugin you need a bundler utility like skpm and add it as a dependency:

npm i -S sketch-module-web-view

Usage

import WebUI from 'sketch-module-web-view'

const options = {
  identifier: 'unique.id', // to reuse the UI
  x: 0,
  y: 0,
  width: 240,
  height: 180,
  background: NSColor.whiteColor(),
  blurredBackground: false,
  onlyShowCloseButton: false,
  title: 'My ui',
  hideTitleBar: false,
  shouldKeepAround: true,
  resizable: false,
  frameLoadDelegate: { // https://developer.apple.com/reference/webkit/webframeloaddelegate?language=objc
    'webView:didFinishLoadForFrame:': function (webView, webFrame) {
      context.document.showMessage('UI loaded!')
      WebUI.clean()
    }
  },
  uiDelegate: {}, // https://developer.apple.com/reference/webkit/webuidelegate?language=objc
  onPanelClose: function () {
    // Stuff
    // return `false` to prevent closing the panel
  }
}

const webUI = new WebUI(context, require('./my-screen.html'), options)

Communicating with the webview

Executing JS on the webview from the plugin

const res = webUI.eval('someJSFunction()')

Executing JS on the webview from the another plugin or command

import { isWebviewPresent, sendToWebview } from 'sketch-module-web-view/remote'

if (isWebviewPresent('unique.id')) {
  sendToWebview('unique.id', 'someJSFunction()')
}

Executing JS in the plugin from the webview

On the plugin:

options.handlers = {
  nativeLog: function (s) {
    context.document.showMessage(s)
  }
}

On the webview:

import pluginCall from 'sketch-module-web-view/client'

pluginCall('nativeLog', 'Called from the webview')

⚠️ When using options.handlers, the webView:didChangeLocationWithinPageForFrame: method of the frameLoadDelegate will be overwritten.

⚠️ When calling pluginCall, the window.location.hash will be modified.

Inspecting the WebView

If your plugin is using a webview, chances are that you will need to inspect it at some point.

To do so, you need to add the preference:

defaults write com.bohemiancoding.sketch3 WebKitDeveloperExtras -bool true

Then you can simply right-click on your webview and click on Inspect. The inspector should show up.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.