Фрагмент кода для использования сложного JavaScript для вставки HTML внутри UIWebView? - PullRequest
3 голосов
/ 15 августа 2011

Мне приходится выполнять сложную работу с UIWebView и Javascript, и всегда возникают проблемы, когда я пытаюсь вставить сложные Javascripts, включающие JQuery и фрагменты HTML, которые сами содержат JavaScript. Кажется, мне никогда не хватает цитат и знаков одинарных кавычек, а вставлять элементы сценария довольно болезненно.

Есть ли у меня волшебный фрагмент Objective-C или более простой способ вставки копий с использованием более сложных сценариев, которые вы используете для таких задач?

РЕДАКТИРОВАТЬ: Чтобы объяснить немного, у меня есть большие фрагменты HTML (содержащие также Javascript и такие вещи, как <a href="javascript:doSomething('stupid')")>, которые мне нужно вставить в DOM через JavaScript, после того, как я загрузил веб-сайт в UIWebView.

Мой подход теперь состоит в том, чтобы поместить HTML-файлы в файлы, переписать их так, чтобы у меня, например, была «тупая» в JS-переменной, поэтому мне не нужны дополнительные одинарные кавычки, поместите заполнители на место, как ### placeholder1 ###, загрузите этот файл в строку NSString и замените эти заполнители динамическими данными, сгенерированными в моем приложении с помощью html = [html stringByReplacingOccurrencesOfString:@"###placeholder1###" withString:dynamicStuffHtml];. Ранее динамические данные не содержат одинарных кавычек, кроме как в текстовом содержимом, для которого я заменяю одинарные кавычки на HTML-кодированные &#39;.

Затем я пытаюсь поместить всю эту строку в DOM, выполнив следующее:

NSString* javascript = [NSString stringWithFormat:@"%@%@%@",@"jQuery('.focus_box').first().before('",html,@"');"];
[webView stringByEvaluatingJavaScriptFromString:javascript];

Это работает для простых и коротких примеров (например, когда я вставляю короткие абзацы или простой HTML), но для полноразмерного фрагмента HTML размером примерно 50-60 строк он просто не работает. Кроме того, все это редактирование, замена, исправление и заполнение заставили меня думать, что, возможно, кто-то, использующий UIWebViews и JavaScript, имеет лучшее решение, которое, как известно, работает.

ВНОВЬ РЕДАКТИРОВАТЬ: я запустил награду, потому что не могу поверить, что UIWebView использует так мало, что никто не может ответить на этот вопрос или уже имеет большой частный класс Tools для обработки такого более сложного взаимодействия JavaScript, где большие куски HTML могут быть включены без перезагрузки. : -)

Ответы [ 2 ]

1 голос
/ 19 августа 2011

Чтобы загрузить некоторую форму файла внутри UIWebView, выполните следующие действия:

<script language="javascript" type="text/javascript">
var bundlePath = "here_goes_full_path_to_your_bundle"; 
// It should be something like file:///var/.../YouApp.app 
// Set it from your code

jQuery.get(bundlePath + "/someFile.html", function(data) {alert(data);});
</script>
0 голосов
/ 25 августа 2011

Я создал несколько сайтов для внутренних вещей, которые используют эту технику довольно широко. Самая большая проблема, с которой я столкнулся - это правильно заключить в кавычки, потому что все ваши кавычки должны быть замаскированы (с)

Вот небольшой фрагмент:

code += "<table onclick='gbyid(\"suchfeld " + parametername + "\").value = \"\", " + parametername + " = \"\"'><tr><td>Delete Date</td></tr></table>"

Не знаю, помогает ли это, но «это просто не работает» - не большой намек:)

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