带有javascript的HTML没有加载到android webview中
The HTML with javascript is not getting loaded in android webview
我正试图用下面的代码在android webview中显示一个包含javascript的HTML页面。但这似乎不起作用。有人能帮我吗。
公共类MainActivity扩展ActionBarActivity{
WebView browser;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.activity_main);
browser = (WebView) findViewById(R.id.webView);
browser.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
browser.setWebViewClient(new Callback());
browser.getSettings().setJavaScriptEnabled(true);
loadTime();
}
void loadTime() {
String page = "<html>"
+"<head>"
+"<title>chat window</title>"
+"<script type='"text/javascript'">"
+ "var bccbId = Math.random(); document.write(unescape('%3Cdiv id=' + bccbId + '%3E%3C/div%3E'));"
+" window._bcvma = window._bcvma || [];"
+" _bcvma.push(['"setAccountID'", '"423771628801258096'"]);"
+" _bcvma.push(['"setParameter'", '"WindowParameters'", '"vr=&vi=&ve=" + gblQnbVars["gUserEmail"] + "&vp=" + gblQnbVars["gMobileNum"] + "&vn= "+ gblQnbVars["gCustomerFirstName"]+ "&lc='"]);"
+"var bcLoad = function(){"
+ " if(window.bcLoaded) return; window.bcLoaded = true;"
+" var vms = document.createElement('"script'");"
+"vms.type = '"text/javascript'";"
+" vms.async = true;"
+" vms.src = ('https:'==document.location.protocol?'https://':'http://') + '"vmss.boldchat.com/aid/423771628801258096/bc.vms4/vms.js'";"
+"var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(vms, s);"
+"};"
+"if(window.pageViewer && pageViewer.load) pageViewer.load();"
+" else if(document.readyState=='"complete'") bcLoad();"
+" else if(window.addEventListener) window.addEventListener('load', bcLoad, false);"
+" else window.attachEvent('onload', bcLoad);"
+ "function FireBoldChat() {"
+" try {"
+ " _bcvmw.chatWindow({"
+ "type: '"chat'","
+ "rdid: '"'","
+ "cwdid:'"1504531236710990857'","
+ "ve:'"<%=visitor email%>'","
+ "vp:'"<%=visitor phone%>'","
+ "vn:'"<%=visitor name%>'","
+ "embed: true"
+ "});"
+" } catch (e) {"
+"setTimeout(FireBoldChat, 500)"
+" }"
+" };"
+" </script>"
+"</head>"
+"<body onload='"FireBoldChat();'">"
+"</body>"
+"</html>";
System.out.println(page);
browser.loadDataWithBaseURL("x-data://base", page,
"text/html", "UTF-8",
null);
}
private class Callback extends WebViewClient {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
loadTime();
return(true);
}
}
每当我在默认浏览器中加载我的这个网页时,它都能正常工作。我哪里做错了。
loadData()
的文档显示
请注意,JavaScript的同源策略意味着,在使用此方法加载的页面中运行的脚本将无法访问使用"数据"以外的任何方案加载的内容,包括"http(s)"。若要避免此限制,请将loadDataWithBaseURL()与适当的基本URL一起使用。
现在您确实使用了loadDataWithBaseURL()
,但您的基本URL是x-data://base
,但您试图从http://vmss.boldchat.com加载脚本。我认为这可能会导致您的问题。
我遇到了同样的问题。我只是更换
vms.src="https://" +'"vmss.boldchat.com/aid/423771628801258096/bc.vms4/vms.js'";"
如果不添加必要的java脚本文件,就会出现这种情况
在运行之前,请检查您的XML格式是否正常
<?xml version="1.0" encoding="utf-8"?>
<WebView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
了解更多信息:http://developer.android.com/guide/webapps/webview.html
您可能不会调用layout公共类MainActivity扩展Activity{
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.activity_main);
WebView webView = (WebView)
browser = findViewById(R.id.webview);
browser.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
browser.setWebViewClient(new Callback());
browser.getSettings().setJavaScriptEnabled(true);
}
}
再试一次,这将有助于
感谢
查看您的代码时,没有在html文件中看到运行时的更改。所以使用上面的页面变量&放入资产文件夹
一旦完成,编写以下代码:
public class ViewWeb extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.webview);
WebView vistaWeb = (WebView) findViewById(R.id.webView1);
vistaWeb.setWebChromeClient(new Callback());
vistaWeb.setWebViewClient(new Callback());
vistaWeb.clearCache(true);
vistaWeb.clearHistory();
vistaWeb.getSettings().setJavaScriptEnabled(true);
vistaWeb.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
vistaWeb.loadUrl("file:///android_asset/aboutcertified.html"); // now it will not fail here
}
}
希望这对你有帮助。
我怀疑变量gblQnbVars
在您的代码段中没有找到任何引用。你能确认它在你的代码中是否可以访问吗?可能是投掷失误。
相关文章:
- window.onload没有'无法在Android WebView中工作
- Android Webview通过Javascript注入CSS
- 在Android WebView中通过javascript检测点击HTML选项标记
- 用JavaScript替换Android WebView模板上的html文本
- Hammer.js阻止在Android Webview中点击超链接
- 在Android WebView中运行Javascript-onPageFinished循环
- Chrome 50的Android WebView在触摸页面之前会阻止Javascript
- HTML5画布支持和Android Webview
- 带有javascript的HTML没有加载到android webview中
- 带有iframe嵌入的Android WebView;t显示在4.2.2及以下
- 如果没有互联网连接,Android WebView离线消息
- Android Webview没有'有时不会加载HTML
- 如何在Android WebView中嵌入Youtube视频
- 检查登录错误Android WebView Javascript
- Injecting JQuery into Android Webview
- 为什么可以't我在Android WebView onLayout中设置了最大宽度
- Android Webview触摸内容
- 了解 Android webview JavaScript 界面
- 控制在 Android WebView 中执行的 JS
- 在 Android WebView 中过滤 DOM 元素,而无需 jQuery