google 表单上的控件获得焦点后,webview loadUrl 停止工作

webview loadUrl stops working AFTER controls on google forms get the focus

我正在尝试为一堆 google 表单 调查创建一个信息亭包装器,并认为这也许是一个很好的机会来体验 android 开发(这是我的第一次尝试)。

问题

我正在覆盖 onBackPressed() 以便让用户在我意识到一旦用户已经将焦点放在调查表上的某个输入字段上,我就无法再加载主页 (loadUrl)。

我无法在 google.com 等其他站点的输入字段中复制此行为。因此我的猜测是 google forms 使用了一些复杂的 javascript(?) 并且这不知何故搞乱了后续的 loadUrl 调用?但这是我第一次尝试java或android,我很惭愧地承认我在黑暗中摸索

我的代码出现问题

我已将出现问题的代码削减到最低限度。两个 loadUrl() 调用,打开我创建的示例 google 表单。如果有人能指出我的错误并指导我如何解决这个问题,我将非常高兴!

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.FrameLayout;

public class MainActivity extends AppCompatActivity {

    protected FrameLayout webViewPlaceholder;
    protected WebView webView;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Initialize the UI
        initUI();
    }

    protected void initUI()
    {
        // Retrieve UI elements
        webViewPlaceholder = ((FrameLayout)findViewById(R.id.webViewPlaceholder));

        // Initialize the WebView if necessary
        if (webView == null)
        {
            // Create the webview
            webView = new WebView(this);
            webView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
            webView.getSettings().setSupportZoom(true);
            webView.getSettings().setJavaScriptEnabled(true);


            // Load the URLs inside the WebView, not in the external web browser
            webView.setWebViewClient(new WebViewClient());

            // Load a page
            webView.loadUrl("https://docs.google.com/forms/d/e/1FAIpQLSdkbLwUPSPL1fx1oL8iMyLkBiMY591qjZ-xwCEf15fyX3ikYw/viewform");
        }

        // Attach the WebView to its placeholder
        webViewPlaceholder.addView(webView);
    }

    @Override
    public void onBackPressed() {
        webView.loadUrl("https://docs.google.com/forms/d/e/1FAIpQLSdkbLwUPSPL1fx1oL8iMyLkBiMY591qjZ-xwCEf15fyX3ikYw/viewform");
    }

行为

照原样,它将加载样本调查表。如果您按下 android UI 后退按钮,它将重新加载它(在本例中为简单起见,我使用相同的 url 作为主页)。如果您向前导航(调查的第 2 步),android UI 后退按钮将带您到封面,表明 loadUrl() 确实有效。但是如果在第 2 步将焦点放在文本字段(或单选按钮)上,android UI 后退按钮将停止运行。

错误

每次我按下UI后退按钮(无论它是否有效,我都会收到以下错误):

W/UnimplementedWebViewApi: Unimplemented WebView method onKeyDown called from: android.webkit.WebView.onKeyDown(WebView.java:2310)

在将代码剥离到最基本的部分之前,我会收到下一条消息:

Webview loadUrl won't work after user focuses on google forms form controls (error InputMethodManagerService: Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient)

我在两条错误消息上找到了多个帖子,但没有任何相关内容。任何帮助将不胜感激!

有趣的是,睡个好觉会有帮助! 对于它的价值,我尝试了以下方法并且现在可以使用:在使用 loadUrl() 重新加载新的 url 之前,我禁用 javascript 并在加载新页面后立即重新启用它!

webView.getSettings().setJavaScriptEnabled(false);
webView.loadUrl("https://docs.google.com/forms/d/e/1FAIpQLSdkbLwUPSPL1fx1oL8iMyLkBiMY591qjZ-xwCEf15fyX3ikYw/viewform");
webView.getSettings().setJavaScriptEnabled(true);

以上代码为onBackPressed()正文