相关疑难解决方法(0)

android.view.WindowManager $ BadTokenException:无法添加窗口android.view.ViewRootImpl$W@c745883 - 权限被拒绝

这是我的堆栈跟踪:

01-30 15:11:41.037 13010-13010/project.app E/AndroidRuntime: FATAL EXCEPTION: main
 Process: project.app, PID: 13010
 android.view.WindowManager$BadTokenException:
   Unable to add window android.view.ViewRootImpl$W@c745883 -- permission denied for window type 2003
   at android.view.ViewRootImpl.setView(ViewRootImpl.java:789)
   at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:356)
   at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
   at android.app.Dialog.show(Dialog.java:330)
   at com.facebook.react.devsupport.DevSupportManagerImpl$4.run(DevSupportManagerImpl.java:344)
   at android.os.Handler.handleCallback(Handler.java:790)
   at android.os.Handler.dispatchMessage(Handler.java:99)
   at android.os.Looper.loop(Looper.java:164)
   at android.app.ActivityThread.main(ActivityThread.java:6494)
   at java.lang.reflect.Method.invoke(Native Method)
   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Run Code Online (Sandbox Code Playgroud)

我找到了关于TYPE_SYSTEM_ERROR在Android Oreo(8)中被弃用的答案,所以我实现了以下方法,我也找到了:

public void fixAndroid() {
    WindowManager.LayoutParams params;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
      params = new WindowManager.LayoutParams(
              WindowManager.LayoutParams.MATCH_PARENT,
              WindowManager.LayoutParams.MATCH_PARENT,
              WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
              WindowManager.LayoutParams.FLAG_FULLSCREEN,
              PixelFormat.TRANSLUCENT);
    } else {
      params = new …
Run Code Online (Sandbox Code Playgroud)

android android-manifest android-permissions react-native react-native-android

12
推荐指数
1
解决办法
2582
查看次数

React Native WebView 中的 Javascript console.log()

我的 React Native 应用程序中有一个 WebView,我需要显示在我的 React Native 应用程序内的 WebView 中执行的 Javascript 的日志。

我认为我需要使用 WebView 的nativeConfig道具来实现这一点,但我不知道如何使其工作。

这是我最近的尝试:

 <WebView
    nativeConfig={{
      props: {
        webContentsDebuggingEnabled: true,
        console: new MyLogger()
      }
    }}
   ...

class MyLogger {
  log = message => {
    console.log(message); // Print in RN logs for now...
  };   
} 
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激。

react-native

12
推荐指数
2
解决办法
6175
查看次数

React-native android WebView句柄在加载之前单击了Url

我正在通过反应原生的WebView显示一个网站.在本网站上有一个PassWallet(.pkpass)文件的链接(不是唯一的用例).当我点击本网站上的任何链接时,我想检查它是否是其他网站或.pkpass文件或其他什么.当这个检查正在运行时,我不想加载任何东西,只要等到我的功能完成,我就知道我是否应该打开一个网站或打开另一个应用程序或其他什么.我想在JavaScript方面做这个,因为我的整个路由功能都在那里,在我看来本机是为这种情况构建的本机:-)

在iOS上有这个美丽的功能onShouldStartLoadWithRequest,它完全符合我的需要.

_onShouldStartLoadWithRequest(e) {

    if(checkUrl(e.url)) {

        let Router = this.props.navigator.props.router;
        let route = Router.getRouteFromUrl(e.url);
        this.props.navigator.push(route);

        return false;

    }

    return true;
}  
Run Code Online (Sandbox Code Playgroud)

我正在接收事件(e)并且可以检查它正在尝试加载的URL.我甚至可以用e.navigationType检查它是否是点击或其他什么.

现在在Android上这个功能不存在.在本机端有功能shouldOverrideUrlLoading但这个功能没有在react-native中实现.我发现以下GitHub问题/ PR https://github.com/facebook/react-native/pull/6478 我现在想,因为这个问题已经关闭,因此有解释,这个功能没有实现.

所以我开始自己找到一种方法.我创建了一个Native UI Component,它显示了一个WebView,然后实现了这个方法.

CustomWebViewManager.java:

package ch.mypackage;

import android.support.annotation.Nullable;
import android.webkit.WebView;

import com.facebook.react.uimanager.SimpleViewManager;
import com.facebook.react.uimanager.ThemedReactContext;
import com.facebook.react.uimanager.annotations.ReactProp;

public class CustomWebViewManager extends SimpleViewManager<CplusWebView> {

    @Override
    public String getName() {
        return "CplusWebView";
    }

    @Override
    protected CustomWebView createViewInstance(ThemedReactContext reactContext) {
        return new CustomWebView(reactContext);
    }

    @ReactProp(name = "url")
    public void setUrl(CustomWebView view, @Nullable String url) …
Run Code Online (Sandbox Code Playgroud)

javascript android webview reactjs react-native

9
推荐指数
1
解决办法
1万
查看次数

我如何在 React Native webview 中从网页访问当前位置

我有一个用 react-js 开发的应用程序。我想将此应用程序集成到react-native-webview 中。一切我都对,但我有两个问题。
1-如何在 react-native-webview 中访问用户的当前位置。
2-如何在 react-native-webview 中调试我的 react-js(网页)应用程序。

对于第一个问题,
如果我在移动浏览器中运行网页并单击该事件,我将获取用户的当前位置,同时当我的react-native 应用程序启动时,我正在调用当前位置的权限,因此在react-native-debugger我“m到处user.i的当前的位置,接着所述相似的例子,但是与反应原生。
确切的问题是如何在 react-native-webview 中访问 webview 的当前位置

对于第二个问题,
当我单击事件以获取当前位置时,它没有显示当前位置,所以 ** 我想看看该事件的错误/响应是什么**。因为它在 webview 中,我可以访问 react-native-debugger 中的 react-native 日志,但无法在调试器中看到 web 视图日志。我也遵循了这个,但我不知道把那个 android 配置代码放在哪里。

的本机代码

import React, {Component} from 'react';
import {PermissionsAndroid} from 'react-native';
import { WebView } from "react-native-webview";

export default class App extends Component {

constructor(props){
    super(props);

    // To see all the requests in the …
Run Code Online (Sandbox Code Playgroud)

android remote-debugging webview reactjs react-native

6
推荐指数
2
解决办法
4539
查看次数

如何通过adb获取webview控制台日志?

我正在构建一个Cordova在 webview 中运行的 Android 应用程序。我知道我可以通过访问 webview,chrome://inspect但它仅适用于调试构建。它无法检查发布 APK 中的 chrome。adb那么有没有办法通过命令获取chrome控制台日志呢?

android google-chrome webview

1
推荐指数
1
解决办法
6617
查看次数