2012-04-03 15 views
2

iOSのPhoneGap 1.5(Cordova)アプリケーションをビルドしていて、ChildBrowserプラグインを使用してPDFファイルを表示したいとします。私はそれを設定することができましたし、私は外部のPDFファイル(http、https)を見ているときに非常にうまく動作します。PhoneGap 1.5 ChildBrowserがローカルファイルを表示できません

アプリのオフライン機能が制限されています。 PDFファイルをダウンロードしてローカルファイルシステムに保存するには、ファイルシステムとファイル転送APIを使用しています。 ChildBrowserプラグインを使用してこれらのドキュメントを表示しようとすると、読み込まれません。

私はいくつかのブレークポイントをプラグインのコマンドとビューコントローラーに固定してトラブルシューティングを行っています。コンソールは、ファイルを示し

The operation couldn't be completed. 
(WebKitErrorDomain error 101.) 

::私はロードしようとしたドキュメントの// URLを、そして私はそれを参照する場合、私は、私は地元のドキュメントを表示しようとすると、私は次のメッセージをwebViewDidFailLoadWithError方法を打つ見つけますシミュレータ上のサファリのURLに、ドキュメントを表示できます。シミュレータで実行した場合、URLは次のようになります。

file://localhost/Users/{username}/Library/Application Support/iPhone Simulator/5.1/Applications/5D8EDAB7-4BB7-409E-989D-250A84B37877/Documents/{filename} 

は私が可能やっているし、そうであれば、どのように私は、ローカルファイルからPDFファイルを表示できるように自分のアプリケーションを設定する必要がありますChildBrowserのシステム?

答えて

4

私はこれを自分で解決できました。 PhoneGapのfileEntry.toURI()メソッドは、私は私のオリジナルのポストに含まどのようなURLに何かを返す:ファイルのURLを確実にするために、いくつかのフープを介してジャンプした後

file://localhost/Users/{username}/Library/Application Support/iPhone Simulator/5.1/Applications/5D8EDAB7-4BB7-409E-989D-250A84B37877/Documents/{filename} 

は脱出し、アプリのドキュメントディレクトリからの相対得られました正常に読み込まれたURLは次のようになります。

file:///Users/{username}/Library/Application%20Support/iPhone%20Simulator/5.1/Applications/B50682DD-AE6C-4015-AE61-3879576A4CB7/Documents/{relativeUri} 

ちょっと違います。この問題を解決するには、すべてのケースではなく、少なくとも私の場合は、ChildBrowserViewControllerのloadURLメソッドを変更して、ファイルのURLを探して絶対のものを取り除き、アプリケーションのドキュメントディレクトリを基準にしたURLを残します。次に、NSFileManagerを使用して、動作するURLを構築しました。私はiOS開発には比較的新しいので、これを行うにはもっと良い方法があります。入力を歓迎します。コードは次のとおりです。

- (void)loadURL:(NSString*)url { 
... 
    else if([url hasPrefix:@"file://"]) { 
     NSError *error = NULL; 

     //Create the regular expression to match against 
     NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"file://.*/Documents/" options:NSRegularExpressionCaseInsensitive error:&error]; 

     // Create the new string by replacing the matching of the regex pattern with the template pattern(empty string) 
     NSString *relativeUri = [regex stringByReplacingMatchesInString:url options:0 range:NSMakeRange(0, [url length]) withTemplate:@""]; 
     NSLog(@"New string: %@", relativeUri); 

     NSURL *documentsDirectory = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; 
     NSURL *url = [documentsDirectory URLByAppendingPathComponent:relativeUri]; 
     NSLog(@"New string: %@", url); 
     NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
     [webView loadRequest:request]; 
    } 
... 
} 
関連する問題