我能否向Chrome自定义标签中注入Javascript代码?

30

在我的应用程序中,我目前使用一个Web视图来显示一些内容。然后,我使用JavaScript注入快速为用户填写表单。

唯一的问题是,与Chrome自定义选项卡相比,Webviews非常慢。是否可能将JavaScript代码注入到这些自定义选项卡中?

例如,这是我目前使用的一些代码:

myWebView.loadUrl("javascript:document.getElementById('join_first_name').value='" + name + "';void(0); ");

2
Chrome浏览器的标签页/应用程序不受我们自己控制。 - channasmcs
1
能够在应用程序内控制加载到 Chrome 中的任何网页将是一个相当大的安全漏洞。 - Raymond
4个回答

33

不行,那将是一个重大的安全漏洞。

由于自定义选项卡使用用户真实Chrome实例中的cookie、设置和密码管理器,您无法对其进行任何控制。


11

Chrome禁止您这样做。 如果允许这样做,那么这将是一个重大的安全漏洞,因为您可以修改应用程序内的页面。

假设您有一个拥有Facebook登陆功能的应用。 如果这是可能的话,其他人可以窃取某人的登录凭据。

使用Chrome自定义选项卡,您无法对提供的内容进行太多控制。 您可能应该尝试另一种替代方法,例如将名字作为URL参数传递,然后在该页面上编写一个脚本来读取该参数并填充表单。


3
你需要使用 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完成的,那么它将成为一个安全漏洞。


2
在Chrome web浏览器中,理论上不存在注入JavaScript的方式。然而,如果你通过一些第三方应用程序执行JavaScript查询,则可以读取所有Cookie、清除每个会话以及进行其他任何JavaScript能做到的事情。这是一个巨大的安全漏洞。
你可以在Webview中加载你的URL并执行JavaScript。这是我所知道的唯一可能的方法。这与EPUB文档使用的技术相同,我们将完整的HTML内容加载到Webview中,然后在该视图中执行外部JavaScript查询,这样你就可以修改HTML、CSS属性。"最初的回答"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接