1

我正在开发一个有 2 个活动的 Android 应用程序。在一项活动中,我有一个 webview(父),它使用 WebChromeClient 的 onCreateWindow 创建子 webview。在 web 代码方面,我存储了 window.open() 的引用,它导致 onCreateWindow 创建子 webview 并向其发送消息。

活动一:

    mWebViewParent.setWebChromeClient(new WebChromeClient(){
        @Override
        public boolean onCreateWindow(WebView webview, boolean isDialog, boolean isUserGesture, Message message) {
           WebView.WebviewTransport transport = (WebView.WebviewTransport) message.obj;
           childWebView = new WebView(mContext);
           transport.setWebView(childWebView);
           message.sendToTarget();
       }
    });

我从网络代码中获取消息以开始第二个活动并完成它。由于我只存储了来自 web 代码的窗口的一个引用,因此window.open()我不会破坏 webview,而只是完成活动;

活动一:

private BroadcastReceiver secondActivityStarted = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        Activity activity = ActivityStack.getActivity();
        activity.setContentView(childWebView);
    }
}

@JavascriptInterface
public void startActivity() {
    IntentFilter filter = new IntentFilter("secondActivityStarted")
    LocalBroadcastManager.getInstance(mContext).registerReceiver(secondActivityStarted, filter);
    Intent intent = new Intent(mContext, SecondActivity.class);
    mContext.startSecondActivity(intent);
}

@JavascriptInterface
public void finishActivity() {
    Activity activity = ActivityStack.getActivity();
    activity.finish();
    ActivityStack.setActivity(null);
    LocalBroadcastManager.getInstance(mContext).unregisterReceiver(secondActivityStarted);
}

活动二:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ActivityStack.setActivity(this);
    Intent actionIntent = new Intent("secondActivityStarted");
    LocalBroadcastManager.getInstance(this).sendBroadcast(actionIntent);
}

第一次,第二个 Activity 中的子 webview 的键盘没有任何问题,但是一旦我完成了 Activity 并再次启动它,键盘需要很长时间才能显示出来,我在键盘上键入的内容不会出现在网络的文本字段中。

我试过的:

  1. 设置和清除子 webview 的焦点

  2. window.open() 的链接使用以下方法丢失:保存子 webview 的状态和来自 onCreateWindow() 的消息参数,销毁子 webview,再次创建 webview,设置状态,并设置新目标的新目标子网页视图。

  3. 在 SecondActivity 的 finish() 中关闭键盘。

  4. 1/2/3的组合

4

0 回答 0