Browse Source

Add insertText to WebContents

Cheng Zhao 9 years ago
parent
commit
5b7d1a9890

+ 15 - 0
atom/browser/api/lib/web-contents.js

@@ -1,3 +1,5 @@
+'use strict';
+
 var EventEmitter, Menu, NavigationController, PDFPageSize, binding, deprecate, getNextId, ipcMain, nextId, ref, session, wrapWebContents,
   slice = [].slice;
 
@@ -53,6 +55,11 @@ PDFPageSize = {
   }
 };
 
+// Following methods are mapped to webFrame.
+const webFrameMethods = [
+  'insertText',
+];
+
 wrapWebContents = function(webContents) {
 
   /* webContents is an EventEmitter. */
@@ -95,6 +102,14 @@ wrapWebContents = function(webContents) {
     }
   }
 
+  // Mapping webFrame methods.
+  for (let method of webFrameMethods) {
+    webContents[method] = function() {
+      let args = Array.prototype.slice.call(arguments);
+      this.send('ELECTRON_INTERNAL_RENDERER_WEB_FRAME_METHOD', method, args);
+    };
+  }
+
   /* Dispatch IPC messages to the ipc module. */
   webContents.on('ipc-message', function(event, packed) {
     var args, channel;

+ 9 - 0
atom/renderer/lib/init.js

@@ -1,3 +1,5 @@
+'user strict';
+
 var Module, arg, error, error1, events, globalPaths, i, len, nodeIntegration, path, pathname, preloadScript, ref, url, v8Util;
 
 events = require('events');
@@ -44,6 +46,13 @@ v8Util = process.atomBinding('v8_util');
 
 v8Util.setHiddenValue(global, 'ipc', new events.EventEmitter);
 
+// Use electron module after everything is ready.
+const electron = require('electron');
+
+// Call webFrame method.
+electron.ipcRenderer.on('ELECTRON_INTERNAL_RENDERER_WEB_FRAME_METHOD', (event, method, args) => {
+  electron.webFrame[method].apply(electron.webFrame, args);
+});
 
 /* Process command line arguments. */
 

+ 7 - 1
atom/renderer/lib/web-view/web-view.js

@@ -376,7 +376,13 @@ registerWebViewElement = function() {
 
   /* Public-facing API methods. */
   methods = ['getURL', 'getTitle', 'isLoading', 'isWaitingForResponse', 'stop', 'reload', 'reloadIgnoringCache', 'canGoBack', 'canGoForward', 'canGoToOffset', 'clearHistory', 'goBack', 'goForward', 'goToIndex', 'goToOffset', 'isCrashed', 'setUserAgent', 'getUserAgent', 'openDevTools', 'closeDevTools', 'isDevToolsOpened', 'isDevToolsFocused', 'inspectElement', 'setAudioMuted', 'isAudioMuted', 'undo', 'redo', 'cut', 'copy', 'paste', 'pasteAndMatchStyle', 'delete', 'selectAll', 'unselect', 'replace', 'replaceMisspelling', 'findInPage', 'stopFindInPage', 'getId', 'downloadURL', 'inspectServiceWorker', 'print', 'printToPDF'];
-  nonblockMethods = ['send', 'sendInputEvent', 'executeJavaScript', 'insertCSS'];
+  nonblockMethods = [
+    'executeJavaScript',
+    'insertCSS',
+    'insertText',
+    'send',
+    'sendInputEvent',
+  ];
 
   /* Forward proto.foo* method calls to WebViewImpl.foo*. */
   createBlockHandler = function(m) {

+ 6 - 0
docs/api/web-contents.md

@@ -472,6 +472,12 @@ Executes the editing command `replace` in web page.
 
 Executes the editing command `replaceMisspelling` in web page.
 
+### `webContents.insertText(text)`
+
+* `text` String
+
+Inserts `text` to the focused element.
+
 ### `webContents.findInPage(text[, options])`
 
 * `text` String - Content to be searched, must not be empty.

+ 1 - 1
docs/api/web-frame.md

@@ -94,6 +94,6 @@ allows registering ServiceWorker and supports fetch API.
 
 * `text` String
 
-* Inserts `text` to the focused element.
+Inserts `text` to the focused element.
 
 [spellchecker]: https://github.com/atom/node-spellchecker

+ 6 - 0
docs/api/web-view-tag.md

@@ -352,6 +352,12 @@ Executes editing command `replace` in page.
 
 Executes editing command `replaceMisspelling` in page.
 
+### `<webview>.insertText(text)`
+
+* `text` String
+
+Inserts `text` to the focused element.
+
 ### `<webview>.findInPage(text[, options])`
 
 * `text` String - Content to be searched, must not be empty.