webview loadUrl停止工作后,控制谷歌表单得到焦点
webview loadUrl stops working AFTER controls on google forms get the focus
我试图为一堆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()
正文
- 后焦点更改为IE 11中的地址栏,而不是转移到表单中的下一个控件
- 将焦点设置为角度模板/路线/表单中的文本输入
- 在表单提交后将焦点设置回原位(javascript)
- 添加新表单时,如何保持表单的焦点
- 如何在给定焦点时选择表单输入中的文本
- 在焦点处理程序中修改表单时不触发表单提交
- 当所有表单具有相同的名称和 id 时,选择焦点字段的表单
- 如果电子邮件输入处于焦点上,则阻止输入按钮表单提交 (jquery)
- 无法将表单输入字段上的 JQuery UI 工具提示限制为仅在单击/焦点事件上显示
- 使用 JavaScript 将焦点设置在 HTML 表单元素上
- HTML 表单 - 电话相对值不会在焦点上消失
- 在单击“输入 JavaScript HTML 表单”时更改焦点
- 当焦点在TextArea上时,按enter键提交表单
- HTML表单可访问性:选项卡键焦点跳过新显示的字段
- 加载表单后立即失去焦点
- Boostrap 2.0:将登录表单添加到子菜单中,防止焦点关闭
- 使用Jquery焦点和模糊方法进行表单验证
- 如何使用JavaScript将焦点设置在HTML表单中的元素上
- 表单文本字段默认在焦点处消失,用户输入保留在表单更正处
- 如何在jQuery中强制丢失表单中所有字段的焦点