javascript - 带有 javascript 的 HTML 未在 android webview 中加载

标签 javascript android html android-webview

我正在尝试使用以下代码在 android webview 中显示包含 HTML 和 javascript 的页面。但这似乎不起作用。任何人都可以帮助我。

公共(public)类 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() 的文档说

Note that JavaScript's same origin policy means that script running in a page loaded using this method will be unable to access content loaded using any scheme other than 'data', including 'http(s)'. To avoid this restriction, use loadDataWithBaseURL() with an appropriate base URL.

现在您确实使用了 loadDataWithBaseURL(),但是您的基本 URL 是 x-data://base 但您尝试从 http(s) 加载脚本://vmss.boldchat.com。我认为这可能会导致您的问题。

关于javascript - 带有 javascript 的 HTML 未在 android webview 中加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29364432/

相关文章:

javascript - 检查映射数组中的项目是否共享值

javascript - 在 JSON 中保存临时数据

javascript - 无法使用模态

android - OnBackPressed 同一 Activity 的多个实例

带有正文参数的Android短信链接

html - 如何使用 CSS flexbox 架构设置文本组件的样式?

javascript - 使用 map() 返回数组时 Uncaught Error

java - 如何使用android粘贴选项

Android canvas drawColor,我似乎无法使用 xml 中定义的颜色

html - Safari 的自动完成功能破坏了输入表单