получить доступ к window.postmessage в Android, родной uicomponent для веб-просмотра и передать в RN - PullRequest
0 голосов
/ 10 июня 2019

Я использовал Webview в android и ios, создавая собственные компоненты пользовательского интерфейса вact-native.В веб-обзоре после выполнения какого-либо действия происходит нажатие кнопки, при котором веб-сайт генерирует событие window.close (), которое мне нужно отловить и выполнить некоторые действия.Моя проблема заключается в том, как я могу захватить событие window.close (), которое будет выброшено с веб-сайта, и передать его в конец RN для дальнейшей обработки.

Ниже приведен собственный код компонента пользовательского интерфейса, реализованный в конце RN:

index.android.js file =>

import PropTypes from 'prop-types';
import { requireNativeComponent, ViewPropTypes } from 'react-native';

// El nom a "name" no importa
const mcs = {
  name: 'PermissionWebview',
  propTypes: {
    sourceUri: PropTypes.string,
    ...ViewPropTypes,
  },
};

module.exports = requireNativeComponent('PermissionWebviewViewManager', mcs);

WebViewMMS.android.js file =>

import React, { Component } from 'react';
import PropTypes from 'prop-types';
import PermissionWebview from '../mms_android';

class WebViewMMS extends Component {
  static navigationOptions = () => ({
    title: 'Testing',
  });

  constructor(props) {
    super(props);
    const { navigation } = this.props;
    this.state = {
      mmsUrl: navigation.state.params.mmsUrl,
    };
  }


  render() {
    const { mmsUrl } = this.state;

    return (
      <PermissionWebview
        mediaPlaybackRequiresUserAction={false}
        domStorageEnabled
        allowsInlineMediaPlayback
        allowFileAccessFromFileURLs
        allowUniversalAccessFromFileURLs
        sourceUri={mmsUrl}
        style={{ flex: 1 }}
      />
    );
  }
}

module.exports = WebViewMMS;
WebViewMMS.propTypes = {
  navigation: PropTypes.shape({
    navigate: PropTypes.func.isRequired,
  }).isRequired,
}; 

Файл Webviewmanager.java =>

public class PermissionWebviewViewManager extends SimpleViewManager<PermissionWebviewView> {

  public static final String REACT_CLASS = "PermissionWebviewViewManager";
  private String source;

  @Override
  public String getName() {
    return REACT_CLASS;
  }

  @Override
  public PermissionWebviewView createViewInstance(ThemedReactContext context) {
    return new PermissionWebviewView(context); //If your customview has more constructor parameters pass it from here.
  }

  @ReactProp(name = "sourceUri")
  public void setSource(PermissionWebviewView view, String source) {
    view.loadUrl(source);
  }
}

Webviewpacakge.java =>

public class PermissionWebviewPackage implements ReactPackage {

  @Override
  public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
    return Arrays.<ViewManager>asList(
      new PermissionWebviewViewManager()
    );
  }

  @Override
  public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
    return Collections.emptyList();
  }
}

customWebview.java file =>

public class PermissionWebviewView extends WebView {

  private Context context;

  public PermissionWebviewView(Context context) {
    super(context);
    this.context = context;
    this.clearHistory();
    this.clearCache(true);
    this.loadUrl("about:blank");
    this.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));

    this.setWebViewClient(new WebViewClient());

    WebSettings webSettings = this.getSettings();
    webSettings.setJavaScriptEnabled(true);        
    webSettings.setUseWideViewPort(true);

    this.setWebChromeClient(new WebChromeClient() {
      @Override
      public void onPermissionRequest(final PermissionRequest request) {
        request.grant(request.getResources());
      }
    });
  }
}

Может кто-нибудь помочь мне разобраться, как мне решить вышеупомянутую проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...