Word Online, Chrome Extension dispatching keypress event issue

30 Views Asked by At

Here is my code for my extension. I would like to be able to type or edit the word page content from JS using either KeyboardEvent or execCommand, I feel, I'm very close as I can fire double-click already but the KeyboardEvent does not work. Any ideas?

manifest.json

{
  "manifest_version": 3,
  "name": "Word Online",
  "version": "1.0.0",
  "content_scripts": [
    {
      "type": "module",
      "run_at": "document_end",
      "all_frames": true,
      "match_origin_as_fallback": true,
      "matches": [
        "*://*.word-edit.officeapps.live.com/*"
      ],
      "js": [
        "word-edit.js"
      ]
    }
  ]
}

word-edit.js

setTimeout(() => {
    const Body = document.body
    const Page = document.querySelector('.PageContent')
    const Panel = document.querySelector('#WACViewPanel')
    const OutlineElement = Page.querySelectorAll('.OutlineElement')
    const Paragraph = Page.querySelectorAll('.Paragraph')
    const Selected = Page.querySelectorAll('.Selected')
    const Elements = document.querySelectorAll('body *')
    const PanelElements = document.querySelectorAll('#WACViewPanel *')
    const WACViewPanel_EditingElement = document.querySelector('#WACViewPanel_EditingElement')

    const options = {
        bubbles: true,
        cancelable: true,
        view: window
    }

    window.addEventListener('keypress', function (event) {
        if (event.key === 'A') {
            console.log('A Pressed')
        }
    })

    const dblclick = new MouseEvent('dblclick', options)
    const change = new CustomEvent('change', options)

    const keyPressEvent = new KeyboardEvent('keypress', {
        key: 'A',
        bubbles: true
    })

    Panel.dispatchEvent(dblclick)
    Body.dispatchEvent(keyPressEvent)

    // PanelElements.forEach(e => {
    //     e.dispatchEvent(keyPressEvent)
    //     console.log(e)
    // })

    // OutlineElement.forEach(e => {
    //     console.log(e)
    // })

}, 2000)
0

There are 0 best solutions below