真的在爲這個掙扎!我正在構建一個顯示WebView
(iOS上的UIWebView
)的Android和iPhone應用程序。該WebView
有它加載的HTML網頁,其中包含定義爲一個簡單的JavaScript函數如下:如何將JSON對象轉換爲JavaScript函數?
function parseJson(input)
{
alert("start of parseJson(...) JavaScript method");
var parsedJson = JSON.parse(input);
alert("end of parseJson(...) JavaScript method");
}
我想要做的就是打電話給我parseJson(input)
的JavaScript從Android/iOS版客戶端傳遞一個string
作爲函數輸入參數。這樣做是爲了Xamarin.Android做如下:
string json = "{}"
myWebView.LoadUrl ("javascript:parseJson(\"" + json + "\")"));
而如下的Xamarin.iOS:
string json = "{}"
myWebView.EvaluateJavascript ("parseJson(\"" + json + "\")");
到這裏,這工作正常。沒問題。 JavaScript函數被調用並執行。另外,我知道我在我的string
要仔細逃脫引號標記字符,如下所示:
string json = "{\\\"key\\\":\\\"value\\\"}";
這也能正常工作。 JavaScript函數被調用並執行。雙逃逸"\r"
和"\n"
(至"\\\r"
和"\\\n"
)也適用。但是,如果JSON字符串包含"\\"
,"\b"
,"\t"
或"\f"
,那麼我的JavaScript函數中的JSON.parse(...)
調用會翻轉(即使該字符是雙重轉義的)。
任何想法,我可以可靠地從客戶端內部逃脫我的JSON字符串之前,我把它喂到我的JavaScript函數?
'StringEscapeUtils.escapeECMAScript(string)'在Java中工作。 – EpicPandaForce
我發現我需要逃避撇號,所以我添加了以下內容: case 39://撇號 sb。附加(」\\'」); 休息; – NightSkyDev
這種方法並不能逃避「和」,如果你沒有逃過引號,頁面可能會被黑客入侵。 –