带有javascript的HTML没有加载到android webview中

The HTML with javascript is not getting loaded in android webview

本文关键字:android webview 加载 javascript HTML 带有      更新时间:2023-09-26

我正试图用下面的代码在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在您的代码段中没有找到任何引用。你能确认它在你的代码中是否可以访问吗?可能是投掷失误。