具有 Web 服务调用的 Html5 应用程序可在模拟器上运行,但不能在设备上运行
Posted
技术标签:
【中文标题】具有 Web 服务调用的 Html5 应用程序可在模拟器上运行,但不能在设备上运行【英文标题】:Html5 app with web service calling works on emulator but not on device 【发布时间】:2014-04-07 10:58:53 【问题描述】:我使用 javascript 在 html5 中开发了一个应用程序。我已经使用 json 调用了 php web 服务。 现在正在尝试为 android 执行它。
应用程序在模拟器上与 Web 服务配合良好,但无法从设备上的服务器加载文本和图像。
我尝试了许多在 *** 和其他链接上找到的解决方案,例如使用主机名、检查设备的 wifi、清单文件中的 INTERNET 权限、使用 WebView,但它不起作用。
请帮忙。
//这是我在eclipse中所做的。
public class MainActivity extends DroidGap
WebView webview;
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("hello","start");
webview = (WebView) findViewById(R.id.webview);
WebSettings webSettings = webview.getSettings();
webSettings.setJavaScriptEnabled(true);
webview.setWebChromeClient(new WebChromeClient());
webview.loadUrl("file:///android_asset/www/HTML/index.html");
Log.d("After load", "url");
@Override
public boolean onCreateOptionsMenu(Menu menu)
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
获取图像和文本都是在 javascript 中完成的。它在浏览器和模拟器上都没有问题。但它在设备上失败了。
//这是我的json调用函数。
<script>
function jsondata(data)
setTimeout(function ()
var parsedata = JSON.parse(JSON.stringify(data));
var main_category = parsedata["mainCategory"];
for (var i = 0; i < main_category.length; i++)
var menu = main_category[i];
menu_id=menu['mcatid'];
var id = document.createElement("table");
if((i%2)==0)
id.innerHTML+='<br><br><br><td><a href="#" onclick="selected_index('+menu_id+')"><img src='+menu['mcatimage']+'><br><hr color=#000;> <strong><font face="DEVROYE">'+menu['mcattitle']+'<hr color=#000;></a></td></strong>';
document.getElementById("id_left").appendChild(id);
else
id.innerHTML+='<br><br><br><tr><td><a href="#" onclick="selected_index('+menu_id+')"><img src='+menu['mcatimage']+'><br><hr color=#000;> <strong><font face="DEVROYE">'+menu['mcattitle']+'<hr color=#000;></a></td></strong>';
document.getElementById("id_right").appendChild(id);
, 2000);
/*-------------calling web service-----------*/
jsonp("http://hostname/maincategory.php?callback=jsondata");
</script>
这是我从 Web 服务获取图像和文本并显示在 HTML 页面上的方法。 这有什么问题?
今天我尝试了很多事情,例如将 <access origin="*"/>
更改为 <access origin=".*"/>
和 <access origin="http:hostname"/>
但没有任何效果。
【问题讨论】:
这真的很难说,因为您没有发布任何内容告诉我们您如何加载图像或文本。贴一些示例代码。 U 在 android 浏览器(本机)上将其加载为 file://,并在 diff 域上调用 ajax,这将是跨域的。 (原生 webview 浏览器对安全性比直接浏览器更严格)。 @Neha 我的 html 文件存储在 www 目录内的 assets 文件夹中,因此正在加载 url 文件:/// 并且我的域在 javascript 代码中被调用,我在其中进行数据的实际处理.在 android 的 logcat 中,它显示 url 已加载,但我没有获取数据。我检查并重复了将 HTML 应用程序转换为 android 的所有步骤,但没有任何效果。我的项目卡在这一点上。请给我一些建议。 这听起来很奇怪,但是在添加时间延迟时它可以在模拟器上工作,但现在同一个文件也不能在模拟器上工作。 覆盖 android webview 的 webclient 并在 onerror 和 onload 资源处查看问题所在..或 url 是否正在加载.. 【参考方案1】:我的应用程序现在也可以在设备上运行。
从安卓端没有问题。我在 javascript 中使用 ajax 而不是 json。它也开始在设备上高效工作。
【讨论】:
以上是关于具有 Web 服务调用的 Html5 应用程序可在模拟器上运行,但不能在设备上运行的主要内容,如果未能解决你的问题,请参考以下文章