Как включить локальный скрипт в удаленный html-файл в Cordova/Phonegap?

У меня есть проект iOS Cordova/Phonegap, который загружает html-страницы из Интернета. Это работает, если я загружаю cordova.js и все плагины, а затем добавляю cordova.js на html-страницу. Однако, поскольку файлы уже находятся в приложении, заставлять людей загружать их все кажется пустой тратой времени. Я пытаюсь включить локальные файлы в удаленный html, но он не загружается. Как я могу это сделать?

У меня есть локальный скрипт test.js в www

alert("test");

Я получаю путь к нему с

[[NSBundle mainBundle] pathForResource:@"test" ofType:@"js" inDirectory:@"www"];

Это похоже на

/var/containers/Bundle/Application/E31EA51E-7ED0-4D30-90FC-57ACBF3B3DA5/MyApp.app/www/test.js

Я включаю файл в удаленный html

<html>
<head>
<meta http-equiv="Content-Security-Policy" content="default-src * 'unsafe-inline' 'unsafe-eval' gap://ready file: data:">
<script src="file:///var/containers/Bundle/Application/E31EA51E-7ED0-4D30-90FC-57ACBF3B3DA5/MyApp.app/www/test.js" type="text/javascript"></script>

Однако скрипт никогда не загружается.

Изменить: я добавил заголовок «Access-Control-Allow-Origin: *» на страницу http, но он все еще не работает.


person Tom Kincaid    schedule 03.12.2017    source источник
comment
Я отказываюсь от этого. Вероятно, какая-то защита, которая не позволяет удаленной странице включать локальный скрипт.   -  person Tom Kincaid    schedule 21.12.2017


Ответы (3)


Столкнувшись с той же проблемой, я думаю, что использование «WKURLSchemeHandler» для перехвата вашего запроса в iOS 11 решит ее.

person syokensyo    schedule 12.03.2018

если вы используете UIWebView, довольно легко использовать подкласс NSURLProtocol, который может перехватывать все ваши сетевые запросы и выполнять свою собственную работу (в вашем случае примите http://*/test.js и верните содержимое файла как ответ).

Однако, если вы используете WKWebView, NSURLProtocol не будет работать, и последняя версия WKURLSchemeHandler также не может перехватывать запросы http/https. Вероятно, лучше всего настроить встроенный http-сервер.

person Sigma    schedule 08.05.2018

Это можно сделать с помощью плагина PR для файла, который решает проблему смешанного содержимого на ios: apache/cordova-plugin-file#296. Исправленная версия доступна по адресу: https://github.com/guylando./cordova-plugin-file

Если вы загружаете удаленный сайт https://example.com в веб-просмотре, он позволяет получить доступ к локальным файлам, используя URL-адрес : https://example.com/cdvfile/bundle/www/cordova.js вместо cdvfile://localhost/bundle/www/cordova.js И тем самым решает проблемы со смешанным содержимым

person Guy L.    schedule 03.03.2019