#javascript #ios #objective-c #uiwebview
#javascript #iOS #objective-c #uiwebview
Вопрос:
В процессе внедрения локального файла .js на внешнюю страницу, размещенную с другого сервера в UIWebView.
Хотя я новичок, я чувствую, что следующий код должен отображать удаленную HTML-страницу и переопределять ее локальным js. файлом. На самом деле он просто загружает страницу без js.
Мой ViewController.m:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//load url into webview
NSString *strURL = @"http://localhost:9080/test/";
NSURL *url = [NSURL URLWithString:strURL];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
[self.viewWeb loadRequest:urlRequest];
NSString *js = [[NSBundle mainBundle] pathForResource:@"script" ofType:@"js" inDirectory:@"www" ];
[self.viewWeb stringByEvaluatingJavaScriptFromString:js];
}
Файл .js (script.js ) вводит файл .css (style.css) в заголовок внешней HTML-страницы:
var link = document.createElement("link");
link.href = "style.css";
link.type = "text/css";
link.rel = "stylesheet";
document.getElementsByTagName("head")[0].appendChild(link);
HTML-код внешней страницы (index.html) является:
<html>
<head>
<meta name="viewport" content="initial-scale=1">
</head>
<body>
<div class="big">TEXT</div>
</body>
</html>
И файлы расположены в www
каталоге, в который папка была импортирована в Xcode как «копировать со ссылками на создание папок».
За пределами проекта Xcode все работает, если я помещаю .js, .html, .css в одну папку. Но как только я запускаю симулятор, он не запускается. Кто-нибудь знает, что я делаю неправильно?
Комментарии:
1. Что вы сделали, чтобы убедиться, что javascript правильно загружается в переменную
js
? Вы заблокировали его или установили точку останова? Вы, конечно, не используете переменную error и не проверяете ее, чтобы убедиться, что все прошло нормально…2. Снаружи, если все три файла находятся в одной папке, они работают. Но не уверен, что вы имеете в виду NSLogged или точку останова. Xcode не показывает никаких ошибок после компиляции.
3. Эта строка:
NSString *js = [NSString stringWithContentsOfFile:jsPath encoding:NSUTF8StringEncoding error:NULL];
Метод принимает аргумент типаNSError **
. Вы не беспокоитесь об этом. Вы не устанавливаете точку останова после этой строки и не проверяетеjs
, и вы этого не делаетеNSLog(@"%@",js);
итак, откуда вы знаете, что файл Javascript успешно прочитан?4. Привет, я понимаю, о чем вы говорите, я удалил этот набор кода. Поскольку я не понял эту часть кода.
5. … ты издеваешься надо мной? Ваш код выглядел в основном правильно, теперь он выглядит совершенно неправильно. Пожалуйста, опубликуйте код, который вы НА САМОМ деле используете. Прежде чем вы внесете здесь правку, создайте ее в своей IDE и попробуйте скомпилировать и запустить и посмотрите, какая разница…
Ответ №1:
Я не профессионал в Javascript, но, как написано:
NSString *js = [[NSBundle mainBundle] pathForResource:@"script" ofType:@"js" inDirectory:@"www" ];
[self.viewWeb stringByEvaluatingJavaScriptFromString:js];
Я не думаю, что это когда-либо могло сработать.
pathForResource:ofType:inDirectory:
возвращает путь к файлу. Опять же, я почти ничего не знаю о Javascript, но я сильно сомневаюсь, что путь к файлу вообще будет выглядеть как какой-либо Javascript.
NSString *js = [[NSBundle mainBundle] pathForResource:@"script" ofType:@"js" inDirectory:@"www" ];
NSLog(@"%@",js);
Попробуйте этот фрагмент и посмотрите, что печатается. Он напечатает одну из двух вещей. Если файл был найден, он выведет путь к этому файлу. Если заполнение не было найдено, будет выведено «(null)» (или что-то вроде этого, поскольку pathForResource:ofType:inDirectory:
метод возвращает nil
, если файл не найден).
Для того, чтобы получить содержимое файла по пути, вам необходимо использовать stringWithContentsOfFile:encoding:error:
, NSString
метод класса.