1. 程式人生 > >ionic angular 與原生進行互動

ionic angular 與原生進行互動

ionic2 與原生進行互動

  • 從ionic 向原生傳遞資料(通過攔截url)
 if (this.disposalProofData) {
  // alert(this.disposalProofData)
  let dataStr = localStorage.getItem('disposalProofData');
  var iFrame;
  iFrame = document.createElement("iframe");
  iFrame.setAttribute("src", 'depreciationeditaccount:&' + dataStr);
  document.body.appendChild(iFrame);
  // 發起請求後這個 iFrame 就沒用了,所以把它從 dom 上移除掉
  iFrame.parentNode.removeChild(iFrame);
  iFrame = null;
  return;
} 
  • 原生攔截資料

    mWebview.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.split("&")[0].contains("depreciationeditaccount")) {
                // 新增資產憑證回顯
                mTag = 1;
                goAccountVoucher(url, 1);
                }
                return true;
            } 
    
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            String orgId = getIntent().getStringExtra("orgId");
    
            // 從原生往 h5快取裡面存東西
            mWebview.loadUrl("javascript:getUserInfo('" + token + "','" + orgId + "');");
            dismissProgressDialog();
        }
    
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            showProgressDialog(getResources().getString(R.string.loading));
        }
    }
    
  • ionic接收引數並儲存

    (在src下面的index 裡面,程式碼入口index)

//接收資料,寫入快取

function getUserInfo(userToken, orgId) {

writeLocalData('userToken', userToken);
writeLocalData('orgId', orgId);
}
  • 原生往h5 傳遞資料

    mWebview.loadUrl("javascript:getNewAssistProofData('" + jsonStr + "');")
    index.html
    <script >
    function getNewAssistProofData(newAssistProofData) {
    if (newAssistProofData) {
    // localStorage.setItem('newAssistProofData', newAssistProofData);
     writeLocalData('newAssistProofData', newAssistProofData);
    }
    }
    function writeLocalData(key, value) {
    localStorage.setItem(key, value);
    var setItemEvent = new Event("setItemEvent");
    setItemEvent.value = value;
    setItemEvent.key = key;
    // 手動觸發setItemEvent
    window.dispatchEvent(setItemEvent);
        }
    </script>
    

附送:

webview初始化:

 mWebview.getSettings().setJavaScriptEnabled(true);
    // 設定可以支援縮放
    mWebview.getSettings().setSupportZoom(true);
    // 設定出現縮放工具
    mWebview.getSettings().setBuiltInZoomControls(true);
    // 擴大比例的縮放
    mWebview.getSettings().setUseWideViewPort(true);
    // 自適應螢幕
    mWebview.getSettings().setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS);
    mWebview.getSettings().setLoadWithOverviewMode(true);


    mWebview.addJavascriptInterface(new WebInterface(), "aa");
    // WebView載入web資源
    mWebview.loadUrl(accUrl);

    // js 支援寫入快取
    mWebview.getSettings().setDomStorageEnabled(true);
    mWebview.getSettings().setAppCacheMaxSize(1024 * 1024 * 8);
    String appCachePath = getApplicationContext().getCacheDir().getAbsolutePath();
    mWebview.getSettings().setAppCachePath(appCachePath);
    mWebview.getSettings().setAllowFileAccess(true);
    mWebview.getSettings().setAppCacheEnabled(true);