UIWebView: ссылка на файлы в комплекте и установка baseURL - PullRequest
0 голосов
/ 29 марта 2012

Я хочу включить несколько файлов .js в файл HTML, который я загружаю в свой UIWebView.Эти файлы находятся внутри моего app bundle.Я также хочу установить другой baseURL для webView.

. Пока я использую следующее:

HTML-файл:

... a bunch more html code above
<head>
<script src="%wJQ%" type="text/javascript"></script> 
</head>
... a bunch more html code below

Файл, который загружает мой UIWebView:

NSString *jQ = [[[NSBundle mainBundle] URLForResource:@"myjsfile" withExtension:@"js"] absoluteString];
htmlString = [htmlString stringByReplacingOccurrencesOfString:@"%wJQ%" withString:jQ];

Это дает мне что-то вроде:

<script src="file://localhost/Users/webmaster/Library/Application%20Support/iPhone%20Simulator/5.1/Applications/43C9E1C2-C7FD-4FC1-BF6A-844266920CCD/MyApp.app/myjsfile.js" type="text/javascript"></script>

К сожалению, когда я вижу UIWebView, кажется, что он не загружаетсяjs файл.

Затем я хочу установить свой baseURL для удаленного URL, потому что мне нужны некоторые относительные ссылки для работы:

NSString *webURL = @"http://www.mysite.com";
[self.webView loadHTMLString:htmlString baseURL:[NSURL URLWithString:webURL]];

Как я могу получить оба этитехники, работающие правильно вместе?

1 Ответ

0 голосов
/ 29 марта 2012

Если к файлам javascript невозможно получить доступ, потому что вы должны установить базовый URL-адрес для чего-то другого, то, возможно, вы могли бы вместо этого внедрить файл (ы) javascript.что он делает и как он взаимодействует с домом.Если он не зависит от dom, вы можете внедрить его в viewDidLoad, если он зависимый, вам нужно будет вставить его в shouldStartLoadWithRequest или webViewDidFinishLoad.Вставьте это так:

    NSBundle *bundle = [NSBundle mainBundle];
    NSURL *jsURL = [bundle URLForResource:@"JavaScript" withExtension:@"js"];  
    NSData *jsData = [NSData dataWithContentsOfURL:jsURL];
    NSString *jsScriptAsString = [[NSMutableString alloc] initWithData:jsData encoding:NSUTF8StringEncoding];
    [self.webView stringByEvaluatingJavaScriptFromString:jsScriptAsString];

Измените свой js-файл на это:

var script = document.createElement('script');  
script.type = 'text/javascript';  
script.text = your stuff
...
document.getElementsByTagName('head')[0].appendChild(script);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...