Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Android WebView doesn't expose AllowFileAccess permissions #15604

Closed
airandfingers opened this issue Aug 22, 2017 · 3 comments
Closed

Android WebView doesn't expose AllowFileAccess permissions #15604

airandfingers opened this issue Aug 22, 2017 · 3 comments
Labels
Resolution: Locked This issue was locked by the bot.

Comments

@airandfingers
Copy link

I want to disable file access within an Android WebView I'm creating using react-native's built-in WebView component.

The Android WebView docs say "File access is enabled by default.", and this is a security concern for my organization.

The react-native 0.31 docs mention a getWebViewHandle method that can be used to access the underlying WebView node; if this worked, then I could (presumably) write:

import { WebView, Platform } from 'react-native';
//...
var reactWebview = <Webview [props here] />
if (Platform.OS === 'android') {
    var webview = reactWebview.getWebViewHandle();
    console.log(webview.getAllowFileAccess()); // check AllowFileAccess setting
    webview.setAllowFileAccess(false); // disable file access
}

However, later versions of the react-native docs don't mention getWebViewHandle, and when I run code like this in react-native 0.44 on an Android device, I get this error:

webview.getWebViewHandle is not a function.

My questions are:

  1. How can we check if file access is enabled by default for the Android WebViews created by react-native's WebView component?

  2. How can we disable this file access? Would we need to extend the WebView class, or fork and modify react-native?

Thanks for your time!

@hramos
Copy link
Contributor

hramos commented Aug 23, 2017

WebView is close to getting deprecated and split out of React Native core. I recommend extending the WebView class as needed, and packaging it as a separate npm package.

@hramos hramos closed this as completed Aug 23, 2017
@airandfingers
Copy link
Author

Thanks for the info and suggestion, @hramos!

I'm now trying to extend the WebView class for my own use, but running into some issues. getWebViewHandle returns a reactTag integer value rather than a native component, but based on its code, I think the actual WebView component should be accessible via this.refs[RCT_WEBVIEW_REF].

This appears to be a component:

Constructor {_currentElement: {…}, _topLevelWrapper: null, _hostParent: Constructor, _hostContainerInfo: {…}, _rootNodeID: 5, …}
    _currentElement:
        $$typeof: Symbol(react.element)
        key: "webViewKey"
        props: {style: Array(2), source: {…}, scalesPageToFit: true, injectedJavaScript: undefined, userAgent: undefined, …}
        ref: "webview"
        type: ƒ Constructor(element)
        _owner: ReactCompositeComponentWrapper {_currentElement: {…}, _rootNodeID: 0, _compositeType: 0, _instance: WebViewWithHandle, _hostParent: Constructor, …}
        _store: {validated: true}
        _self: null
        _source: null
        __proto__: Object
    _debugID: 14
    _hostContainerInfo: {_tag: 1}
    _hostParent: Constructor {_currentElement: {…}, _topLevelWrapper: null, _hostParent: Constructor, _hostContainerInfo: {…}, _rootNodeID: 4, …}
    _mountImage: null
    _mountIndex: 0
    _renderedChildren: null
    _rootNodeID: 5
    _topLevelWrapper: null
    __proto__: ReactNativeBaseComponent

However, I can't access any of the public methods that Android WebViews are supposed to expose, per https://developer.android.com/reference/android/webkit/WebView.html (getSettings is the one I want to call).

How can I access a native component given a reference like the one above?

@Quelu
Copy link

Quelu commented Sep 27, 2017

@hramos Do you have more information about the future deprecation of the WebView in React Native ? Like when or some links ?

@facebook facebook locked as resolved and limited conversation to collaborators Aug 23, 2018
@react-native-bot react-native-bot added the Resolution: Locked This issue was locked by the bot. label Aug 23, 2018
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Resolution: Locked This issue was locked by the bot.
Projects
None yet
Development

No branches or pull requests

4 participants