如何将复杂的javascript自运行函数注入android中的webview?
我试图在运行服务器url“www.myserver.com”的webview中注入javascript函数。但是,我不能这样做。我尝试了几种方法,但没有成功。我尝试设置js警报,在读取js文件时不会弹出警报。我不确定我做错了什么。以下是我目前的代码: 我的js文件“page.js”: 以下是我的webview代码:如何将复杂的javascript自运行函数注入android中的webview?,android,android-fragments,android-webview,android-websettings,javascript-injection,Android,Android Fragments,Android Webview,Android Websettings,Javascript Injection,我试图在运行服务器url“www.myserver.com”的webview中注入javascript函数。但是,我不能这样做。我尝试了几种方法,但没有成功。我尝试设置js警报,在读取js文件时不会弹出警报。我不确定我做错了什么。以下是我目前的代码: 我的js文件“page.js”: 以下是我的webview代码: @Override public void onPageFinished(WebView view, String url) {
@Override
public void onPageFinished(WebView view, String url) {
String javascript = "";
try{
AssetManager manager = view.getContext().getAssets();
InputStream is = manager.open("page.js");
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while (( line = br.readLine()) != null) {
javascript += line;
}
is.close();
}
catch(Exception e){}
view.loadUrl("javascript:" + javascript);
}
webview.setWebChromeClient(new WebChromeClient() {});
webview.loadUrl(url);
有没有办法让警报弹出?
注意:当我删除js中的所有函数并只保留警报时,警报会工作,但在我重新添加必要的js函数后,警报不再工作。知道是什么阻止了它像预期的那样注入js吗?考虑一下这段代码。这是简单的html和javascript代码,以page.js为模型
<html>
<script type="text/javascript">
(function() { alert('inside function'); })
alert('ok');
</script>
</html>
(函数(){alert('inside function');})
警报(“正常”);
执行此操作时,可以推断函数中的警报不会在开始时执行,除非您专门调用它
单击运行函数:(尝试此操作)
var run=(函数(){alert('inside function');})
警报(“正常”);
运行你的函数[自运行](试试这个)
var run=(函数(){alert('inside function');})
警报(“正常”);
//您需要执行已命名的函数
run();
如何修复并调用我的js函数使其工作?我在本地代码中的何处以及如何触发它来替换html中的onclick=“run”?我已经更新了一个新示例。您需要命名函数,并执行它以运行itthanks。当我将整个文件内容复制粘贴为字符串,而不是在我的输入流阅读器中以“file.js”的形式读取内容时,它就会起作用。我想这也解释了我的js文件中的标签和新行。你知道有什么方法可以确保这些选项卡和新行不会出现吗?不管怎样,谢谢你的回复。您还可以帮助我解决我面临的关于从同一javascript字符串解析json的问题吗:
<html>
<script type="text/javascript">
(function() { alert('inside function'); })
alert('ok');
</script>
</html>
<html>
<input type="button" onclick="run()" value="Start" />
<script type="text/javascript">
var run = (function() { alert('inside function'); })
alert('ok');
</script>
</html>
<html>
<script type="text/javascript">
var run = (function() { alert('inside function'); })
alert('ok');
//you need to execute your function that you have named
run();
</script>
</html>