-1

我有一個網頁視圖頁面加載完成後我在哪裏注入的JavaScript(onpagefinished)如下:如何json解析android webview中的url參數?

@Override 
        public void onPageFinished(WebView view, String url) { 
String jscontent = ""; 
         try{ 
          AssetManager manager = view.getContext().getAssets(); 
          InputStream is = manager.open("page.js"); 
          InputStreamReader isr = new InputStreamReader(is); 
          BufferedReader br = new BufferedReader(isr); 

          String line; 
          while ((line = br.readLine()) != null) { 
           jscontent += line; 

          } 
           is.close(); 
          } 
view.loadUrl("javascript:" + jscontent); 
} 

這是JavaScript的網頁我讀: page.js:

if (window.page) { 
     return; // page has been loaded from somewhere, not to redefine it again 
    } 
var _$p = window.page = { 
      version: "0.1" 
     }; 
function Response(xhr) { 
     this.xhr = xhr; 
     this.status = xhr.status; 
    } 
    Response.prototype.getHeader = function(header) { 
     return this.xhr.getResponseHeader(header); 
    }; 
    Response.prototype.getBody = function() { 
     return this.xhr.responseText; 
    }; 

    function ajax(url, callback) { 
     //TODO support PUT method 
     var xhr = new XMLHttpRequest(); 
     xhr.open("GET", url, true); 
     xhr.onerror = function(e) { 
      callback.onerror(e); 
     }; 
     xhr.onreadystatechange = function(event) { 
      if (this.readyState != this.DONE || this.status == 0) { 
       return; 
      } 
      if (this.status != 200) { 
       var response = new Response(xhr); 
       callback.onfail(response); 
       return; 
      } 
      callback.onsuccess(this.responseText); 
     }; 
     xhr.send(); 
    }; 


    var rpc = { 
     type: ["SMALL", "LARGE"], 
     exec: function(call, type) {// "call" conform to JSON-RPC 2.0 
      //TODO differentiate POST/GET based on rpc.type.SMALL/LARGE 
      var param = encodeURIComponent(JSON.stringify(call)); 
      ajax("?_$p=" + param, { 
       onerror: function(e) { 
        //TODO use logging 
        alert("Error:"+e.toString()); 
       }, 
       onfail: function(response) { 
        //TODO use logging 
        alert("Failed:"+response.getBoby()); 
       }, 
       onsuccess: function(text) { 
        //TODO use logging 
        alert("Page success:"+text); 
       }, 
      }); 
     } 
    }; 
_$p.navigate = function(url, title) { 
      rpc.exec(// JSON-RPC 2.0 
       {method: "navigate", params: { 
        "url": url, 
        "title": title 
       }}, rpc.type.SMALL); 
     }; 

如何在javascript中解析導航函數的url參數的json值。 json的示例:{「method」:「navigate」,「params」:{「url」:「http://some.url」,「title」:「Some Url」}}。 另外,在webview的shouldinterceptrequest方法下執行它會是理想的嗎?

謝謝!

+0

對不起,我真的不知道你的意思是由json的url值,你介意解釋嗎? – sihao

+0

在我的JavaScript,你看到json:$ p.navigate?我想從那裏檢索網址和標題值,並將其傳遞給本地變量 –

+0

我不太確定rpc是如何工作的。但如果你只是想把變量拿出來,你可以試試我的答案。 – sihao

回答

-1

我也不太清楚你想達到什麼目的,但..

基於您給定的代碼:

.... 

var _$p = window.page = { 
     version: "0.1" 
    }; 

//create variables to store your "local variables" 
var local_url = ""; 
var local_title = ""; 

function Response(xhr) { 
    this.xhr = xhr; 
    this.status = xhr.status; 
} 

.... 

_$p.navigate = function(url, title) { 
     rpc.exec(// JSON-RPC 2.0 
      {method: "navigate", params: { 
       "url": url, 
       "title": title 
      }}, rpc.type.SMALL); 

     //save your variables into your "local variables" 
     local_url = url; 
     local_title = title; 
}; 

注:變量將僅$ p.navigate後可用叫做。否則,它將是一個空字符串。

+0

但這些都是javascript變量。沒有操縱或觸摸JavaScript文件。只是閱讀它是如何解析java參數中的url參數的json值,以便從JSONObject或類似的javascript中的導航參數中檢索url和title? –

+0

另外,這裏是我想要實現的詳細步驟,這是最後一步和第五步,希望能讓它更加明顯:http://stackoverflow.com/questions/36454232/how-do-i-navigate-在一個webview-with-the-a-locally-imported-js-file幫助 –

+0

我該如何在JavaScript之外傳遞這個local_url?如果我可以將它傳遞給我的本地java參數,也可能工作。有任何想法嗎? –