Commit Graph

81 Commits

Author SHA1 Message Date
RedPandaTronics d4ab332891
feat(iOS): Add Hardware Silence (#1218)
* Fixes Issue #1140

Fixes https://github.com/react-native-community/react-native-webview/issues/1140
Based on a solution found at: https://stackoverflow.com/questions/56460362/how-to-force-wkwebview-to-ignore-hardware-silent-switch-on-ios
I changed the code found in the linked source from Swift to Objective-C, as required by this project. WARNING: I haven't used Swift before and very limited experience with Objective-C.

- For me this seems to work, but it is not the cleanest solution in my opinion.
- It might also be possible to play generated sound (i.e. using oscillator) instead of hardcoding the silent base64 mp3 data.
- Maybe ignoring silence switch should only be done if a parameter is supplied

* fixes import path

* adds documentation for ignoreSilentHardwareSwitch

* adds ignoreSilentHardwareSwitch parameter

* reverting back to old import path

* Update Guide.md

Co-authored-by: Dominik Beste <dominik.beste@gmail.com>
2020-04-13 08:54:47 -07:00
Salvatore Randazzo 571fb8df79
fix(iOS): injectedJavaScriptBeforeContentLoaded now runs when messaging is not enabled (#1286) 2020-04-07 09:59:52 -07:00
Jamie Birch 9cb2f6e2f3
feat(iOS): WKUserScripts (e.g. injectedJavaScript) can now update upon props change; and can be configured to inject into all frames. (#1119)
BREAKING CHANGE: 
• Props updates to `injectedJavaScript` are no longer immutable.

• `injectedJavaScript` no longer attaches a `jsEvaluationValue` property to the `onLoadingFinish` event. Check out: https://github.com/react-native-community/react-native-webview/pull/1119#issuecomment-574919464 to migrate with the same behavior.
2020-03-17 14:01:20 -07:00
Tom Underhill 1e572318ec
feat(macOS): macOS Support (#1164) 2020-02-12 15:39:11 -08:00
Tommy Nguyen e6edc6dc73 fix(iOS): Meta method 'UIScrollViewContentInsetAdjustmentBehavior:' conflict warning
This converter is already defined in
[RCTScrollViewManager.m](https://github.com/facebook/react-native/blob/master/React/Views/ScrollView/RCTScrollViewManager.m#L40).

Redefining it in react-native-webview can cause undefined behaviour when
used. Since ScrollView is unlikely to go away, we can take a dependency on it.

All current tests should pass.

When building a React Native app with `react-native-webview`, the following
warning can be seen in the build logs:

```
Meta method 'UIScrollViewContentInsetAdjustmentBehavior:' in category from /~/Library/Developer/Xcode/DerivedData/App-geojljebaazfrrgvxfkjjpiwmdlg/Build/Products/Debug-iphonesimulator/React-Core/libReact-Core.a(RCTScrollViewManager.o) conflicts with same method from another category
```

The warning should go away after removing the offending function.

Co-authored-by: Jason Safaiyeh <safaiyeh@protonmail.com>
2020-01-19 20:07:35 -08:00
Jamie Birch 5e8b4d5c2b chore(iOS): Extract wkWebViewConfig setup to setUpWkWebViewConfig function 2020-01-07 22:27:53 -08:00
sunzhongliang 4f4644ffd8 fix(iOS): WKWebView RetainCycle (#1096) 2019-12-27 11:39:53 +01:00
Ben Wildeman adb5608116 fix(iOS): Ignore WebKitDomainError 101 (#961) 2019-12-17 10:55:26 +01:00
Jason Safaiyeh 361529630f feat(ios): Generate history API events on iOS (#1082)
BREAKING CHANGE: if you use onNavigationStateChange on iOS it will now trigger on # changes to the url.

* Hook the `window.history` API on iOS to generate events

The underlying WKWebView doesn't seem to generate any events in response to the `window.history` API - none of the `WKNavigationDelegate` methods fire.

Given this limitation, the only way to know when the location changes via this API is to inject Javascript into the page and have it notify the native code directly when any of these functions are called.

The `setTimeout` call gives up the current tick, allowing the location to change before firing the event.

* Remove the outdated section about hash changes

Now that this bug is fixed, the workaround is no longer required.
2019-12-16 17:52:54 +01:00
StasD 88b64981f4 fix(ios): Make allowFileAccessFromFileURLs work in iOS. (#1061) 2019-12-06 11:16:56 +01:00
Salvatore Randazzo 604495e399 feat(iOS): new prop injectedJavaScriptBeforeContentLoaded (#1038)
* Run the injectedJavaScript on DocumentStart for iOS

* Add new prop injectedJavaScriptBeforeContentLoaded
Update types
Update docs

* Self review
2019-12-06 11:15:02 +01:00
Dima Paloskin 09372c9d95 fix(iOS): hideKeyboardAccessoryView on iPads (#661) 2019-09-27 01:27:42 +02:00
Abraham Przewodnik 05e2d27662 fix(iOS): Fix changing notification bars #735 (#898)
UIWindowDidBecomeVisibleNotification and UIWindowDidBecomeHiddenNotification seem far more reliable at detecting fullscreen video.

Tested on iOS 11, 12 and 13
2019-09-27 01:22:07 +02:00
jnpdx 6cfdd4b88c fix(iOS): Xcode issues and warnings (no functionality changes) (#860)
* Fix Xcode warnings (enums, whitespace, string literals)

* Add nullability notations
2019-09-23 10:49:06 +02:00
Samuel Sieg a76811da93 feat(iOS): Add callback for webViewWebContentProcessDidTerminate (#774)
* Add callback for WKWebView's onContentProcessDidTerminate

* Add platform information to docs

* Add new WebViewTerminatedEvent type
2019-09-23 10:20:12 +02:00
Ezequiel Aceto 136fbd8491 feat(iOS): Allow custom CA to be used on webview requests (#865)
* Allow custom CA to be used on webview requests

* Add documentation and an example for Custom CA / SSL Pinning
2019-09-21 02:44:53 +02:00
Jason Chia-Hsien Ho 552472c414 feat(new prop): onHttpError callback (#885) 2019-09-21 02:43:28 +02:00
Wilson d25b20ac03 fix(iOS): inconsistent backgroundColor (#868)
* fix inconsistent backgroundColor

* remove redundant setBackgroundColor
2019-09-21 02:39:06 +02:00
hank121314 c366fdf2e7 fix(iOS): use RCTConvert to convert allowingReadAccessToURL. (#845)
* fix(ios):use RCTConvert to convert url instead of using URLWithStringg

* fix(iOS):remove stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding, because it's deprecated in iOS 9
2019-09-05 15:13:33 +02:00
Thibault Malbranche 8549be5fd0
fix(iOS): UIWebView Removal (#828)
Apple required us to remove this (see #819)

BREAKING CHANGE: UIWebView has been removed
BREAKING CHANGE: useWebkit prop removal
BREAKING CHANGE: scalesPageToFit prop removal on iOS (since it's not compatible with WKWebview)
BREAKING CHANGE: Renamed RNCWKWebView to RNCWebView on iOS
2019-08-30 12:04:32 +02:00
Arjan Zuidema d87bb58208 fix(iOS): javaScriptEnabled property (#826) 2019-08-30 10:53:48 +02:00
aksmfosef11 a28096bfe7 feat(iOS): add-javaScriptEnabled prop (#592)
* add-javaScriptEnabled-in-IOS

* Update WebViewTypes.ts
2019-08-29 17:09:42 +02:00
Harry Yu 0424dd0801 feat(iOS): Add prop for allowingReadAccessToURL (#771) 2019-08-29 16:53:09 +02:00
aarondail 493b65de21 feat(iOS): added `contentInsetAdjustmentBehavior` prop
* Adding a `contentInsetAdjustmentBehavior` prop to the WebView for iOS.
This controls the way iOS will automatically adjust the insets when the
webview is behind things like the iPhone X notch.

* Removing the code to explicitly pass contentInsetAdjustmentBehavior to the WebView since it is already passed in otherProps.
2019-08-09 10:55:35 +02:00
Evgeniy Yurtaev 68f3c08b54 fix(iOS): signature of the swizzled `elementDidFocus` method on iOS 13 2019-08-08 10:32:41 +02:00
Gary Fung 3baebf84db feat(injectedJavaScript): Error replaced by warnings, and callback runs
* Changes error/redbox into warning/yellowbox. So wouldn't crash production releases
* Warning added actual error, useful for debugging bad JS injected into webview
* callback runs, whether there's error or not. As used in my app (https://medium.com/wonderswipe/rethink-mobile-search-10-100x-faster-introducing-wonderswipe-6f2ff0d0e667) which injects JS into sanitized html from the wild, small error in injected JS doesn't warrant the whole JS payload from being injected/run
2019-08-04 10:43:04 +02:00
Peter Ho 231100dc3c fix(iOS): Align look and feel of Window.prompt() to Mobile Safari (#677) 2019-08-02 11:00:05 +02:00
Penar Musaraj 71d1fcc675 feat(iOS WKWebView): Add mainDocumentURL to onShouldStartLoadWithRequest(#493)
* Pass mainDocumentURL to onShouldStartLoadWithRequest

* Update reference

* Update typescript types

* Update WebViewTypes.ts
2019-06-13 08:59:52 +02:00
ptrocki 6e79f2a26f fix(iOS WKWebView): contentInset not properly applied (#603) 2019-06-02 20:54:17 +02:00
Penar Musaraj 4dc4b89e64 feat(iOS WkWebview): Add applicationNameForUserAgent support (#506) 2019-05-21 00:01:22 +02:00
Jared Forsyth e4c8dab2ae feat(onScroll): Add `onScroll` callback for iOS & Android (#516)
* Add `onScroll` callback for iOS & Android

This code was mostly extracted from https://github.com/react-native-community/react-native-webview/pull/202

I tried and tried to make it work with `Animated.event`'s `useNativeDriver`, but I was unsuccessful 😢 that'll have to be done later once I understand better how Animated's native stuff is hooked up.

* fix crash for missing onScroll
2019-05-17 00:27:16 +02:00
Eric Lewis c2914a8d73 fix(WKWebView): StatusBar is gone after fullscreen (iOS 12) (#544)
fixes #62
2019-04-30 10:08:41 +02:00
Eric Lewis 455c30e000 feat(WKWebView): Allow focus without user interaction (#540)
* [iOS] Allow focus without user interaction

* Add documentation for keyboardDisplayRequiresUserAction

* set keyboardDisplayRequiresUserAction default to true
2019-04-29 17:46:07 +02:00
TMomemt 7a91221926 fix(WKWebView): iOS crash when WebView's title is nil (#521) 2019-04-23 11:16:04 +02:00
SebiVPS cdbfc19cd2 feat(iOS cookies): implement sharedCookiesEnabled prop for iOS RNCWKWebView (#175)
We had the problem on iOS WebViews that local cookies (stored in local HTTPCookieStorage, set with  [react-native-cookie](https://github.com/shimohq/react-native-cookie) ) were not added in loadRequests. On Android the local stored cookies were sent like expected.
This kinda "hacky" solution is the only way we found, that works for us.
The stack overview link is in the code below.
If someone finds a better solution we would very much like to accept that.
2019-04-15 10:19:10 +02:00
jimerino 9c9b7d721a fix(iOS WKWebView): fixed local html files loading on real devices (#403) 2019-04-02 15:46:00 +02:00
Jian Wei 08cc600eb8 feat(WKWebView): add prop `directionalLockEnabled` for iOS (#389) 2019-03-07 10:27:29 +01:00
Thibault Malbranche 2cef5cbb3f
fix(WKWebView Scrolling): fixed broken scroll (#372)
fixes #371
2019-03-01 10:46:53 +01:00
Chet Corcos 0e6e92a7f1 fix(WKWebview Scroll): Don't allow the scrollView to scroll when `scrollEnabled={false}`. (#158)
* Don't allow the scrollview to scroll the WebView body.

* Readme comment

* Remove duplicate protocol def
2019-02-28 22:01:42 +01:00
Christoph Jerolimov f27f13e931 fix(WKWebView): resolved crash with WebKit on iOS 9.x. (#342)
This PR fixes two crashes when enableWebKit is true (which was the default) on iOS 9.x. The first one when the WebView component was mounted (fixes issue #150) and the second one, when the component was unmounted (fixes issue #213).

The first problem happen when the RNCWKWebView.m was loaded:

The programming guide for WebKit (version 2006) ([pdf](http://mirror.informatimago.com/next/developer.apple.com/documentation/Cocoa/Conceptual/DisplayWebContent/WebKit_DisplayWebContent.pdf)) from Apple said, that it is (was) required to check if the 'new' WebKit Framework was available. This was required when the WebKit framework was only available on Mac OS X (10.2) when the Safari was installed. 😆

Because WebKit is (currently..) a fix part of iOS we didn't need this check this anymore to determinate if WebKit is available. I also see no other reference that this is required in iOS so I just remove this code. Without this code the WebView works also on iOS 9.x.

The second issue happen when the WKWebView was removed from the native view hierarchy. Its required (only on iOS 9) to remove the UIScrollView delegate before cleaning up the webview.

Its possible to try this PR with:

```
npm install --save "react-native-webview@jerolimov/react-native-webview#fix-ios9-crash"
# or
yarn add "react-native-webview@jerolimov/react-native-webview#fix-ios9-crash"
```

If you use CocoaPods, you should also update your Pods with

```
cd ios && pod update && cd ..
```
2019-02-14 15:18:15 +01:00
Jordan Sexton 92c20581ae feat(toggle scroll bar): added new props showsVerticalScrollIndicator / showsHorizontalScrollIndicator (#250) 2019-02-12 14:47:24 +01:00
Maosen Jason Hu fc5fd242e2 feat(wkwebview): create api to allow clients to present a client credential for authentication (#141)
* In order for TLS Mutual Auth to work for webviews, the caller must present a credential. Expose a setter that can be called to set a credential.
2019-02-12 10:35:14 +01:00
Alexander Stammbach 3f58b0e597 fix(WKWebView.m): Reapplied #134 with additional checks to tackle unintentional scrolls (#296) 2019-02-06 15:29:59 +01:00
Thibault Malbranche d5fc028383 fix(PostMessage): Renamed ReactNativeWebview to ReactNativeWebView
fixes #304
2019-02-01 22:04:11 +01:00
Thibault Malbranche f3bdab5a22
feat(Android/iOS postMessage): refactoring the old postMessage implementation (#303)
fixes #29
fixes #272
fixes #221
fixes #105
fixes #66

BREAKING CHANGE: Communication from webview to react-native has been completely rewritten. React-native-webview will not use or override window.postMessage anymore. Reasons behind these changes can be found throughout so many issues that it made sense to go that way.

Instead of using window.postMessage(data, *), please now use window.ReactNativeWebView.postMessage(data).

Side note: if you wish to keep compatibility with the old version when you upgrade, you can use the injectedJavascript prop to do that:

const injectedJavascript = `(function() {
  window.postMessage = function(data) {
    window.ReactNativeWebView.postMessage(data);
  };
})()`;

Huge thanks to @jordansexton and @KoenLav!
2019-02-01 18:37:28 +01:00
Benjos Antony 6643a8e38d feat(WKwebview): Allow _target links to be opened up in the same way as UIWebView. (#270)
Fixes #139
2019-02-01 02:18:02 +01:00
Michael Diarmid 83ce79ff89 feat(iOS/Android): Add `cacheEnabled` prop (#152)
Added a new cacheEnabled prop to toggle Android & iOS webview caching behavior.

BREAKING CHANGE:  This change makes caching enabled by default when previously there was no caching behavior which may cause unexpected behaviour changes in your existing implementations.
2019-01-30 10:32:46 +01:00
Chet Corcos 4bc1dc20fd fix(WKWebview): Update webview property when allowsBackForwardNavigationGestures prop changes (#173) 2019-01-11 19:53:55 +01:00
José Luis Pereira 6f612242fe fix(WKWebView): Add "Frame load interrupted" error handling for OAuth (#147) 2019-01-11 15:01:49 +01:00
José Luis Pereira 62f871c186 feat(WKWebview): Add incognito prop to iOS WKWebview
Allows the webview to be opened with an ephemeral data storage.
2019-01-11 14:59:03 +01:00