Android WebView和javascript
此链接:表示可以将javascript注入到由WebView呈现的网页中,如下所示:Android WebView和javascript,android,Android,此链接:表示可以将javascript注入到由WebView呈现的网页中,如下所示: webview.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { webview.loadUrl("javascript:(function() { " + "document.getElem
webview.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url)
{
webview.loadUrl("javascript:(function() { " +
"document.getElementsByTagName('body')[0].style.color = 'red'; " +
"})()");
}
});
我想进一步注入一个在按键时执行的函数
我正在使用:
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url)
{
webView.loadUrl("javascript:function keyHandler(e) { " +
"document.getElementsByTagName('body')[0].style.color = 'red'; " +
"}");
}
});
页面已经编写好,包含document.onkeypress=keyHandler,AFAIK应该将我的keyHandler函数与页面上发生的任何键事件连接起来
问题是,它不起作用。我希望它在按键时将文本更改为红色。相反,在我按下任何键之前,页面被呈现,文本变为红色
我是不是误解了这一切是如何协同工作的
正因为如此,我没有试图破解任何东西,我的目的是为我的雇主创建的网页提供自定义javascript响应,以便在Android WebView中呈现。使用loadUrl()
执行javascript,而不是将其添加到文档中。您在执行的脚本中必须执行的操作类似于
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url)
{
webview.loadUrl("javascript:function() { " +
"var script = document.createElement('script'); " +
"script.innerHTML = 'function keyHandler(e) { document.getElementsByTagName('body')[0].style.color = 'red'; }'" +
"document.getElementsByTagName('head')[0].appendChild(script); " +
"}");
}
});
我不明白……你是说我必须:将你发布的代码添加到网页,在webView.loadUrl()中定义[]之间的内容,然后网页将自动调用我的javascript?你想做的是动态地将函数keyHandler(e)添加到文档中,对吗?这意味着您必须使用loadUrl()调用一个javascript函数,该函数正是这样做的。看我修改过的答案。顺便说一句:我还没有测试过,这只是给你一个想法,所以如果你复制并通过它,它不会马上运行,请不要向我开枪。谢谢你的澄清。我想我明白了。我想我所要做的就是在loadUrl()中定义脚本。但实际上,我必须定义它并将其附加到页面上。这是正确的解释吗?我意识到这个片段没有任何保证。我很高兴能把这件事讲出来,举个例子就是一个奖励。