Проблема при передаче массива из xcode в javascript с использованием SBJason - PullRequest
0 голосов
/ 20 ноября 2011

Я пытаюсь передать массив из xcode в мой локальный html. В основном я использую Jquery в html, поэтому для чтения HTML, а также включенных файлов .js m используется loadHTMLstring: с baseURL. Теперь я столкнулся с проблемой при использовании stringByevaluatingjavascriptfromstring для загрузки веб-просмотра. Код:

NSString *java=[NSString stringWithFormat:@"javafunction('%@');",json];
[webView loadHTMLString:content baseURL:baseURL];    
[webView stringByEvaluatingJavaScriptFromString:java];

в моем HTML я использую:

function javafunction(inp) {
  var arr=newArray(); 
  arr='inp'; 
  alert(arr[0]);
}

1 Ответ

0 голосов
/ 20 ноября 2011

Я думаю,

var arr=newArray(); 
arr='inp'; 

должно быть

var arr = new Array(); 
arr[0] = inp;

, которое устанавливает нулевой элемент массива в строку 'inp' или

var arr = [inp];

который использует сокращенный синтаксис массива или даже

var arr = new Array();
arr.push('inp');

, который использует Array push метод для добавления входного параметра, inp, в конец массива.

newArray, вероятно, просто приведет к ошибке, подобной newArray is not defined, а arr='inp' заменит массив строкой вместо помещения строки в массив.

EDIT:

[NSString stringWithFormat:@"javafunction('%@');",json]

это, вероятно, не то, что вы хотите.Если json является строкой в ​​кодировке JSON, вы, вероятно, захотите удалить одинарные кавычки.Если это не JSON-кодированная строка, то, вероятно, вы захотите JSON-кодировать ее.

Это может быть незначительной проблемой, но вы также должны знать, что не все строки JSON являются допустимыми выражениями JavaScript, поскольку JSONразрешает кодовые точки Юникода U + 2028 и U + 2029 в строках, но эта кодовая точка является новой строкой в ​​JavaScript.Т.е. JavaScript-выражение eval(JSON.stringify("\u2028")) не выполняется с исключением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...