1

指定された Web ページとその内部ページ リソースをディスクにダウンロードしようとしています。NSURLRequest を送信すると、最初の URL のみがリクエストされ、画像、css、js などのリソースはダウンロードされません。

誰かがキャッシュの使用を提案していますが、uiwebview で閲覧したすべての Web ページをキャッシュするのではなく、指定したものだけをキャッシュしたくありません。たとえば、uiwebview アドレスバーに URL を入力して [保存] ボタンをクリックすると、ページ全体が保存されますが、webview 内の他の閲覧は自動的にキャッシュされません。

ウェブページ全体をダウンロードする方法はありますか? どうもありがとうございました!

4

2 に答える 2

1

私は一度同じ問題に遭遇し、ASIWebPageRequestを使用して解決しました。当時は古いものでしたが、まだ動作します。

フォルダーに Web ページをダウンロードするためのメソッド (サンプル メソッドに基づく) を作成しました。これを機能させるには、これを変更する必要があります。

- (IBAction)loadURL:(NSURL *)url inFolder:(NSString*)folderPath
{
    // Assume request is a property of our controller
    // First, we'll cancel any in-progress page load
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
    [[self request] setDelegate:nil];
    [[self request] cancel];

    [self setRequest:[ASIWebPageRequest requestWithURL:url]];
    [[self request] setDelegate:self];
    [[self request] setDidFailSelector:@selector(webPageFetchFailed:)];
    [[self request] setDidFinishSelector:@selector(webPageFetchSucceeded:)];

    // Tell the request to embed external resources directly in the page
    [[self request] setUrlReplacementMode:ASIReplaceExternalResourcesWithData];

    self.theCache.storagePath = folderPath;


    // It is strongly recommended you use a download cache with ASIWebPageRequest
    // When using a cache, external resources are automatically stored in the cache
    // and can be pulled from the cache on subsequent page loads
    self.request.cacheStoragePolicy = ASICachePermanentlyCacheStoragePolicy;
   [[self request] setDownloadCache:self.theCache];

   // Ask the download cache for a place to store the cached data
   // This is the most efficient way for an ASIWebPageRequest to store a web page
   //[[self request] setDownloadDestinationPath:
   //[[ASIDownloadCache sharedCache] pathToStoreCachedResponseDataForRequest:[self request]]];
   [[self request] setDownloadDestinationPath:[self.theCache pathToStoreCachedResponseDataForRequest:[self request]]];

   [[self request] startAsynchronous];

}

ASIDownloadCache も使用しました。

...
    ASIDownloadCache *localCache = [[ASIDownloadCache alloc] init];
    self.theCache = localCache;
...
于 2013-04-16T18:56:05.047 に答える