diff --git a/README.md b/README.md index db682c43..e677a06c 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,7 @@ Then the permission will be asked when the camera is used. * [`getCookies(...)`](#getcookies) * [`close()`](#close) * [`openWebView(...)`](#openwebview) +* [`executeScript(...)`](#executescript) * [`setUrl(...)`](#seturl) * [`addListener('urlChangeEvent', ...)`](#addlistenerurlchangeevent) * [`addListener('closeEvent', ...)`](#addlistenercloseevent) @@ -138,6 +139,21 @@ Open url in a new webview with toolbars -------------------- +### executeScript(...) + +```typescript +executeScript({ code }: { code: string; }) => Promise +``` + +Injects JavaScript code into the InAppBrowser window. + +| Param | Type | +| --------- | ------------------------------ | +| **`__0`** | { code: string; } | + +-------------------- + + ### setUrl(...) ```typescript diff --git a/android/src/main/java/ee/forgr/capacitor_inappbrowser/InAppBrowserPlugin.java b/android/src/main/java/ee/forgr/capacitor_inappbrowser/InAppBrowserPlugin.java index 24ea039e..d357c0b2 100644 --- a/android/src/main/java/ee/forgr/capacitor_inappbrowser/InAppBrowserPlugin.java +++ b/android/src/main/java/ee/forgr/capacitor_inappbrowser/InAppBrowserPlugin.java @@ -314,6 +314,28 @@ public void run() { ); } + @PluginMethod + public void executeScript(PluginCall call) { + String script = call.getString("code"); + if (script == null || TextUtils.isEmpty(script)) { + call.reject("No script to run"); + } + + if (webViewDialog != null) { + this.getActivity() + .runOnUiThread( + new Runnable() { + @Override + public void run() { + webViewDialog.executeScript(script); + } + } + ); + } + + call.resolve(); + } + @PluginMethod public void reload(PluginCall call) { if (webViewDialog != null) { diff --git a/android/src/main/java/ee/forgr/capacitor_inappbrowser/WebViewDialog.java b/android/src/main/java/ee/forgr/capacitor_inappbrowser/WebViewDialog.java index 2d09d945..a1652807 100644 --- a/android/src/main/java/ee/forgr/capacitor_inappbrowser/WebViewDialog.java +++ b/android/src/main/java/ee/forgr/capacitor_inappbrowser/WebViewDialog.java @@ -171,6 +171,10 @@ public String getUrl() { return _webView.getUrl(); } + public void executeScript(String script) { + _webView.evaluateJavascript(script, null); + } + public void setUrl(String url) { Map requestHeaders = new HashMap<>(); if (_options.getHeaders() != null) { diff --git a/ios/Plugin/InAppBrowserPlugin.swift b/ios/Plugin/InAppBrowserPlugin.swift index 39bb91e0..7bdbe686 100644 --- a/ios/Plugin/InAppBrowserPlugin.swift +++ b/ios/Plugin/InAppBrowserPlugin.swift @@ -206,6 +206,14 @@ public class InAppBrowserPlugin: CAPPlugin { call.resolve() } + @objc func executeScript(_ call: CAPPluginCall) { + guard let script = call.getString("code") else { + call.reject("Cannot get script to execute") + return + } + self.webViewController?.executeScript(script: script) + } + func isHexColorCode(_ input: String) -> Bool { let hexColorRegex = "^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$" diff --git a/ios/Plugin/WKWebViewController.swift b/ios/Plugin/WKWebViewController.swift index f0356e31..0ccb8cf4 100644 --- a/ios/Plugin/WKWebViewController.swift +++ b/ios/Plugin/WKWebViewController.swift @@ -245,8 +245,6 @@ open class WKWebViewController: UIViewController { self.previousToolbarState = (navigation.toolbar.tintColor, navigation.toolbar.isHidden) } - // self.restateViewHeight() - if let s = self.source { self.load(source: s) } else { @@ -380,6 +378,10 @@ public extension WKWebViewController { func reload() { webView?.reload() } + + func executeScript(script: String, completion: ((Any?, Error?) -> Void)? = nil) { + webView?.evaluateJavaScript(script, completionHandler: completion) + } } // MARK: - Fileprivate Methods diff --git a/src/definitions.ts b/src/definitions.ts index af982f5d..dbd481b7 100644 --- a/src/definitions.ts +++ b/src/definitions.ts @@ -223,6 +223,10 @@ export interface InAppBrowserPlugin { * @since 0.1.0 */ openWebView(options: OpenWebViewOptions): Promise; + /** + * Injects JavaScript code into the InAppBrowser window. + */ + executeScript({ code }: { code: string }): Promise; setUrl(options: { url: string }): Promise; /** * Listen for url change, only for openWebView diff --git a/src/web.ts b/src/web.ts index dfc58a99..f3b21649 100644 --- a/src/web.ts +++ b/src/web.ts @@ -29,6 +29,11 @@ export class InAppBrowserWeb extends WebPlugin implements InAppBrowserPlugin { return options; } + async executeScript({ code }: {code: string }): Promise { + console.log("code", code); + return code; + } + async close(): Promise { console.log("close"); return;