使用 WebView.loadUrl 执行 javascript 在第一次运行应用程序时不起作用
executing javascript with WebView.loadUrl doesn't work when FIRST TIME running the app
在我的项目中,首先,我从数据库中获取了几个字符串,然后将每个字符串标记为<li>
,并通过调用javascript函数将它们附加到空<ul>
中。每当我修改代码并运行它时,第一次,js 函数似乎没有执行,但是当我再次运行它时,js 工作了,所有字符串都已作为<li>
添加到<ul>
中。只要我从未修改过代码,应用程序就可以正常工作,这意味着如果我在移动设备中重新安装它,js 直到第二次打开此应用程序才能正常工作。数据库的东西没有错。我认为问题是在执行 js 之前绘制了 web 视图,然后当重新绘制 web 视图时,一切都很好。
这是我的活动.java
public class WebView_testActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
WebView web = (WebView)findViewById(R.id.web_content);
webView_handler(web);
data_handler(web);
Log.d(MyLog.LOG, "end of file");
}
private void webView_handler(WebView web){
web.loadUrl("file:///android_asset/FormPanel.html");
web.getSettings().setJavaScriptEnabled(true);
}
private void data_handler(WebView web){
boolean hasSD = Environment.getExternalStorageState().equals( android.os.Environment.MEDIA_MOUNTED);
//String SDPATH = Environment.getExternalStorageDirectory().getPath();
if(hasSD){
DbHelper data_helper = new DbHelper(this, "/mnt/sdcard/CTIL/QuestionDB/Q1.db");
SQLiteDatabase database = data_helper.getReadableDatabase();
String sql = "SELECT pe.Description FROM tblFormEngine_PoolElement pe " +
"NATURAL JOIN tblFormEngine_FormElement fe WHERE fe.PanelID = 1";
Cursor c = database.rawQuery(sql,null);
if(c.getCount() == 0)
Log.d(MyLog.LOG, "empty");
c.moveToFirst();
if(!c.isAfterLast()){
do{
String description = c.getString(0);
String html = "<li><p>" + description + "</p></li>";
Log.d(MyLog.LOG, html);
//web.loadUrl("javascript:Element_AppendHTML('content','""+html+"'")");
MyThread mt = new MyThread(web, html);
mt.start();
}while(c.moveToNext());
}
c.close();
database.close();
}
}
private class MyThread extends Thread{
private WebView web;
private String html;
MyThread(WebView web, String html){
this.web = web;
this.html = html;
}
public void run(){
try {
web.loadUrl("javascript:Element_AppendHTML('content','""+html+"'")");
sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
这是js函数(实际上是一个JQuery函数):
function Element_AppendHTML(ElementID,HTML)
{
$("#"+ElementID).append(HTML);
}
以下是原始HTML文件,如果您需要查看:
<html>
<head>
<title>Form Panel</title>
<meta charset="utf-8">
<link rel="stylesheet" href="theme/FormPanel_Basic.css">
<script type="text/javascript" src="js/jquery-1.5.1.js"></script>
<script type="text/javascript" src="js/jquery.scrollTo-1.4.2-min.js"></script>
<script type="text/javascript" src="js/jquery.scrollToMe.js"></script>
<script type="text/javascript" src="js/FormPanel.js"></script>
</head>
<body>
<ul id="content" selected="true">
</ul>
</body>
</html>
有什么建议吗?
更改自
web.loadUrl("file:///android_asset/FormPanel.html");
web.getSettings().setJavaScriptEnabled(true);
自
web.getSettings().setJavaScriptEnabled(true);
web.loadUrl("file:///android_asset/FormPanel.html");
完成设置后不调用加载网址吗?
相关文章:
- ng应用程序使脚本无限运行
- 仅为一个窗体运行应用程序脚本
- Meteor应用程序无法运行-对象#<编译器>没有方法'主机'
- 谷歌图表在运行应用程序时只能显示一次
- MAC操作系统-如何通过Java类运行应用程序(.app)
- 获取docker容器中运行的节点应用程序的IP地址
- 在安装后首次运行应用程序时从 UIBebView 发出 jQuery Ajax 请求
- 如何更新日期?当我运行应用程序时,它被卡住了
- 如何从 HTML 运行应用程序
- 使用 WebView.loadUrl 执行 javascript 在第一次运行应用程序时不起作用
- 不知道如何在节点中运行应用程序.js
- 如何在运行应用程序时用javascript清除AngularJS应用程序中的缓存
- 搜索源阻止运行应用程序后,从流星1.1更新到流星1.2
- 如果我应用断点并在调试模式下运行应用程序,则应用程序可以完美运行
- 我在本地主机上运行应用程序时出现错误.无法加载XMLHttpRequest
- 你的意思是js:垂直模块运行应用程序创建器
- 在node.js中运行应用程序时出现连接超时错误
- 错误:$injector:modulerr模块运行应用程序时出错
- Knockout只有在Heroku上运行应用程序时才能解析绑定
- 多次运行应用程序而不停止上一次