2

UIWebViewにhtml文字列を読み込もうとすると問題が発生します。これは私がしていることです

NSString *temp = [[NSString alloc] initWithFormat:@"<head><script type='text/javascript' src='code39.js'></script><style type='text/css'>#barcode {font-weight: normal; font-style: normal; line-height:normal; sans-serif; font-size: 12pt}</style></head><body><script type='text/javascript'>function get_object(id) {var object = null;if (document.layers) {object = document.layers[id];} else if (document.all) {object = document.all[id];}return object;}get_object('barcode').innerHTML=DrawCode39Barcode('%@',2);</script></body>",[count objectAtIndex:i]];

[mainWebView loadHTMLString:temp baseURL:nil];

だからここに問題があります:

<script type='text/javascript' src='code39.js'>

アプリケーションにcode39.jsファイルを追加して、HTMLがファイルにアクセスしてUIWebviewにロードできるようにするにはどうすればよいですか。

助けてください...

4

4 に答える 4

11

最も簡単な解決策

アプリに JavaScript コードが同梱されており、ネットワーク経由で取得しない場合、簡単な解決策は、JavaScript コードを外部リソースではなくインラインにすることです。つまり、他の JavaScript コードと同じようにcode39.js、タグの間にのコンテンツを配置できます。<script>

もちろん、大量のコードを追加したい場合、これはうまく機能せず、HTML がさらに複雑になります。あなたのNSString宣言は、(さらに) すぐに扱いにくくなります!


代替手段: スクリプトをリソースとして追加する

JavaScript ファイルをリソース ファイルとして追加して、アプリ バンドル内に含めることができます。これを行うにはcode39.js、Xcode プロジェクトに追加するだけです。

デフォルトでは、Xcode は.js「ソースのコンパイル」ビルド フェーズにファイルを追加することに注意してください。これは必要ありませ。ファイルをリソースとして扱いたい。ありがたいことに、修正は簡単です。

  1. 最上位プロジェクトを選択して、その設定にアクセスします。
  2. アプリケーション ターゲットをクリックし、[Build Phases] を選択します。
  3. .jsファイルを「コンパイル ソース」セクションから「バンドル リソースのコピー」セクションにドラッグします。

これにより、アプリをビルドするときに、Xcode がスクリプト ファイルを "Resources" ディレクトリに確実にコピーします。

スクリプト リソースの URL を見つける

スクリプトがリソースとして含まれたら、ファイル システム上のその場所を指す URL を見つける必要があります。幸いなことに、Cocoa ではこれを非常に簡単に行うことができます。

NSURL* url = [[NSBundle mainBundle] URLForResource:@"code39" withExtension:@"js"];

返されるのは、アプリ バンドル内のファイルurlへの絶対 URLです。code39.jsそこから、次のように、この URL を別の文字列に挿入するのは非常に簡単です。

NSString* html = [NSString stringWithFormat:@"<script src='%@'>", url];

HTML をロードするUIWebViewと、スクリプトへの完全な URL が取得され、スクリプトが実行されます。この方法は、iOS 6.0 用に作成したばかりのテスト プロジェクトで機能しました。


(補足: HTML コンテンツをソース コードから分離しておくことを強くお勧めします。上記のアプローチを簡単に適用して、プレーン テキスト ファイルのコンテンツを .xml ファイルに読み込むことができますNSString。)

于 2012-10-17T05:59:37.253 に答える
2

Xcode でプロジェクトを開きます。「ターゲット」に移動し、「ソースのコンパイル」を調べます。js ファイルがそのフォルダーにある場合は、それを「Copy Bundle Resources」フォルダーに移動し、「Compile Sources」フォルダーから削除します。

于 2012-10-17T06:32:50.057 に答える
1

js ファイルがプロジェクトに追加された場合、以下のコードが機能することを願っています。

[mainWebView loadHTMLString:temp baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];

または -- サーバーから js ファイルを受信した場合は、code39.js ファイルをアプリケーションのドキュメント フォルダーに配置します。

   NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
   NSString *basePath = [paths objectAtIndex:0];
   NSURL *baseURL = [NSURL fileURLWithPath:basePath];
   [mainWebView loadHTMLString:temp baseURL:baseURL];

これで問題が解決することを願っています:)

于 2013-03-13T11:37:22.133 に答える
0

まあまあ、それはもう少し複雑です。html ファイルの場合は、相対パスを使用してください。HTML が Objective-C コードである場合、https://github.com/robbiehanson/CocoaHTTPServerのような http サーバーをセットアップし、js の絶対パスを使用する必要があります。

于 2012-10-17T05:04:32.047 に答える