webview loadUrl停止工作后,控制谷歌表单得到焦点

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

本文关键字:表单 焦点 谷歌 控制 loadUrl 停止工作 webview      更新时间:2023-09-26

我试图为一堆google表单调查创建一个kiosk-wrapper,并认为这可能是一个体验android开发的好机会(这是我的第一次尝试)。

<标题>

我重写了onBackPressed(),以便允许用户跳转到我的主页(一个链接到各种调查的索引页),当我意识到一旦用户已经把重点放在调查表单上的一些输入字段上,我就不能再加载主页了(loadUrl)。

我无法在其他网站(如google.com)的输入字段中复制这种行为。因此,我的猜测是,谷歌表单使用一些复杂的javascript(?),这在某种程度上搞乱了随后的loadUrl调用?但这是我第一次尝试java或android,我很惭愧地承认我在黑暗中摸索。

显示问题的代码

我已经将显示问题的代码缩减到最小。两个loadUrl()呼叫,打开一个示例谷歌的形式,我已经创建。如果有人能指出我的错误,并给我一些关于如何克服这个问题的指导,我将非常高兴!

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作为主页)。如果您向前导航(调查的第二步),android UI返回按钮将带您到封面页,表明loadUrl()确实有效。但是如果在第二步你把焦点放在文本框(或单选按钮)上,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()正文