Внедренный Javascript, не переопределяющий URL в UIWebView

#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 метод класса.