[Webkit-unassigned] [Bug 184271] New: Can not create custom pasteboard types in clipboardData.setData

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Tue Apr 3 10:51:33 PDT 2018


https://bugs.webkit.org/show_bug.cgi?id=184271

            Bug ID: 184271
           Summary: Can not create custom pasteboard types in
                    clipboardData.setData
           Product: WebKit
           Version: Safari 11
          Hardware: iPhone / iPad
                OS: iOS 11
            Status: NEW
          Severity: Normal
          Priority: P2
         Component: WebCore JavaScript
          Assignee: webkit-unassigned at lists.webkit.org
          Reporter: ccorcos at gmail.com

It appears that in iOS, only a limited set of pasteboard types are allowed. See the supportedWebContentPasteboardTypes method inside https://opensource.apple.com/source/WebCore/WebCore-7604.1.38.0.7/platform/ios/PasteboardIOS.mm.auto.html

Whereas on desktop, you can create whatever pasteboard types that you want.

This is very important in rich text applications that rely on copy-paste of structured content that needs to be treated differently when pasting inside the application vs outside the application.

I've created a simple demonstration of this in a CodePen which you can open in iOS Safari and I've copied the source code below: https://codepen.io/ccorcos/pen/KooVZB?editors=1010

When you create a selection in the contenteditable input and select copy, we save some structured information in a custom pasteboard type, and when we paste, we parse it back out. This works fine in desktop Safari, but does not work on iOS.

```html

<div id="input" contenteditable>Hello world</div>

```


```js

const input = document.getElementById("input")

window.addEventListener("copy", event => {
  event.preventDefault()
  const data = JSON.stringify({data: input.textContent})
  console.log("copy", data)
  event.clipboardData.setData("app/custom-key", data)
})

window.addEventListener("paste", event => {
  event.preventDefault()
  console.log(event)
  const data = event.clipboardData.getData("app/custom-key")
  console.log("pasteData", data)
  if (!data) {
    console.log("no data")
    return
  }
  const result = JSON.parse(data)
  input.innerHTML = result.data
})

```

-- 
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-unassigned/attachments/20180403/4571f3a5/attachment-0002.html>


More information about the webkit-unassigned mailing list