web-dev-qa-db-ja.com

UIWebViewは外部Javascriptファイルをロードしません

次の無邪気なコード(index.html)がありますが、code.jsファイルが読み込まれません。ファイルの内容をHTMLページにコピーして貼り付けるとうまくいきます。 index.htmlファイルとcode.jsファイルの両方が同じディレクトリにあります。これはコードスニペットです。どんな助けでも素晴らしいでしょう。

index.html:

<html>
<head>
<script type="text/javascript" src="code.js"></script>
</head> 
<body onload="drawImage()">
  <div><canvas id="canvas" width="320" height="480"></canvas></div> 
</body>
</html>

ViewController.m:

- (void)viewDidLoad {
  [super viewDidLoad];
// load the first webpage
[homePageWebView loadRequest:[NSURLRequest requestWithURL:[NSURLfileURLWithPath:
  [[NSBundle mainBundle] pathForResource:@"index"ofType:@"html"] isDirectory:NO]]];
}
27
Amarsh

Xcodeはjsファイルをコンパイルする必要があると考えていることがわかりました。

Xcodeでプロジェクトを開きます。 「ターゲット」に移動し、「ソースのコンパイル」を調べます。そのフォルダーにjsファイルが表示されている場合は、「バンドルリソースのコピー」フォルダーに移動し、「ソースのコンパイル」フォルダーから削除します。

テスト用にすでにインストールされている場合は、iPhoneからアプリを削除します。 Xcodeの[ビルド]メニューに移動し、すべてのターゲットをクリーンアップします。次に、再コンパイルします。

今すぐチェックして、HTMLファイルが実際にjsファイルを認識しているかどうかを確認してください。

リンダ

60
Linda

相対パスを理解できるように、HTMLファイルを文字列に読み込み、ロード時にbaseURLを設定する必要があります。

NSError* error;
NSString* html = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"] encoding:NSASCIIStringEncoding error:&error];

[webview loadHTMLString:html baseURL:[self getBaseURL]];

- (NSURL*) getBaseURL {
    NSString* path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
    NSRange r = [path rangeOfString:@"/" options:NSBackwardsSearch];
    path = [path substringToIndex:r.location];

    path = [path stringByReplacingOccurrencesOfString:@"/" withString:@"//"];
    path = [path stringByReplacingOccurrencesOfString:@" " withString:@"%20"];
    path = [NSString stringWithFormat:@"file:/%@//",path];
    return  [NSURL URLWithString:path];
}

そのような何かがあなたのために働くはずです。

7
skorulis

Lindaの回答を補足するために、ここにファイルがあります。

enter image description here

6
NSRover

私も同じ問題に直面しました。XCodeにファイルを追加するときに簡単なことを行うことでそれを克服しました。次の図に示す小さな変更を行いました。

次の図では、1つはHTML、Javascript、CSSのようなファイルを追加するためのもので、もう1つは一般的なXCodeファイル用です。

for HTML, Javascript and CSS files

For general XCode files

5
Teja Swaroop