cordova-ios icon indicating copy to clipboard operation
cordova-ios copied to clipboard

CDVWebViewEngine needs a way to set the websiteDataStore of its configuration

Open msmtamburro opened this issue 5 years ago • 0 comments

Feature Request

Motivation Behind Feature

A websiteDataStore can both be configured (e.g., set to non-persistent) and re-used (e.g., in other web browser components).

Feature Description

Optionally exposing the configuration as typically done with the "Cordova settings" model may not suffice. For example, if you only added a Cordova setting for persistent vs. non-persistent, this would still not give us a handle to the websiteDataStore for re-use elsewhere. More specifically, allowing Cordova to use an existing websiteDataStore that was created and used prior to Cordova reaching its createConfigurationFromSettings method is important in my case. You could accomplish this by providing a protocol that allows us to return a websiteDataStore.

For example, add the following lines to CDVWebViewEngine.h:

@protocol CDVWebViewEngineConfigurationDelegate <NSObject>
/// Provides a fully configured WKWebsiteDataStore; useful for customizing configuration
- (nonnull WKWebViewConfiguration *)configuration;
@end

and then expose this property:

@property (nullable, nonatomic, weak) CDVPlugin<CDVWebViewEngineConfigurationDelegate>* configurationDelegate;

And finally, in CDVWebViewEngine.m, inside of createConfigurationFromSettings: start with:

    WKWebViewConfiguration* configuration = [_configurationDelegate configuration];
    if (configuration) {
        return configuration;
    }

Alternatives or Workarounds

When using the CDVWKWebViewEngine (the old plugin), it was possible to override createConfigurationFromSettings to customize portions of the configuration that were not exposed through Cordova settings. With the migration to CDVWebViewEngine, its private status prevents this type of customization without resorting to swizzling.

msmtamburro avatar Jun 16 '20 17:06 msmtamburro