在我的应用程序中,我目前使用一个Web视图来显示一些内容。然后,我使用JavaScript注入快速为用户填写表单。
唯一的问题是,与Chrome自定义选项卡相比,Webviews非常慢。是否可能将JavaScript代码注入到这些自定义选项卡中?
例如,这是我目前使用的一些代码:
myWebView.loadUrl("javascript:document.getElementById('join_first_name').value='" + name + "';void(0); ");
在我的应用程序中,我目前使用一个Web视图来显示一些内容。然后,我使用JavaScript注入快速为用户填写表单。
唯一的问题是,与Chrome自定义选项卡相比,Webviews非常慢。是否可能将JavaScript代码注入到这些自定义选项卡中?
例如,这是我目前使用的一些代码:
myWebView.loadUrl("javascript:document.getElementById('join_first_name').value='" + name + "';void(0); ");
不行,那将是一个重大的安全漏洞。
由于自定义选项卡使用用户真实Chrome实例中的cookie、设置和密码管理器,您无法对其进行任何控制。
Chrome禁止您这样做。 如果允许这样做,那么这将是一个重大的安全漏洞,因为您可以修改应用程序内的页面。
假设您有一个拥有Facebook登陆功能的应用。 如果这是可能的话,其他人可以窃取某人的登录凭据。
使用Chrome自定义选项卡,您无法对提供的内容进行太多控制。 您可能应该尝试另一种替代方法,例如将名字作为URL参数传递,然后在该页面上编写一个脚本来读取该参数并填充表单。
data:text/html,
作为你的脚本前缀来实现这样的效果。data:text/html,<script>alert("hello")</script>
它将触发JavaScript并弹出提示,并且您还可以从URL中打印一些HTML。
因此,我猜您只需要打开带有脚本的选项卡。
String suffix = "data:text/html,"
String script = "<script>document.getElementById('join_first_name').value='" + name + "';</script>"
String url = suffix + script
myWebView.loadUrl(url);
这是关于桌面版和移动版浏览器的行为。
我还没有在WebView.loadUrl
中尝试过,实际上如果它是通过WebView.loadUrl
完成的,那么它将成为一个安全漏洞。