UIPasteboardの "Apple Web Archive pasteboard type"項目をデコードする

私はウェブページをコピーしていて、UIPasteBoardにコピーされた辞書がどのように構成されているかを見たいと思っています。私は現在、次のように一般のペーストボードにアイテムを記録しています:

UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];

for (NSDictionary *dict in pasteboard.items) {

    NSLog(@"Dict: %@", dict);
}

出力は次のとおりです。

Dict: {
    "Apple Web Archive pasteboard type" = <62706c69 73743030 d2010203 0d5f100f 57656253 75627265 736f7572 6365735f 100f5765 624d6169 6e526573 6f757263 65a104d4 05060708 090a0b0c 5e576562 5265736f 75726365 55524c5f 100f5765.............

私は、次のように "Apple Web Archive pasteboard type"キーの文字列を取得しようとしましたが、成功しませんでした:

NSString *string = [[NSString alloc] initWithData:[dict objectForKey:@""Apple Web Archive pasteboard type""] encoding:NSUTF8StringEncoding];

NSLog(@"item %@", string);

このキーのデータをどうすればデコードできますか?

3

4 答え

Apple Web ArchiveのペーストボードタイプはPlistで、発見キー用にPlistエディタで開きます。 また、以下の短いコード(貼り付けられたWebページから画像情報を取得する)

if ([[[UIPasteboard generalPasteboard] pasteboardTypes] containsObject:WEB_ARCHIVE]) {
    NSData* archiveData = [[UIPasteboard generalPasteboard] valueForPasteboardType:WEB_ARCHIVE];
    if (archiveData)
    {
        NSError* error = nil;
        id webArchive = [NSPropertyListSerialization propertyListWithData:archiveData options:NSPropertyListImmutable format:NULL error:&error];
        if (error) {
            return;
        }
        NSArray *subItems = [NSArray arrayWithArray:[webArchive objectForKey:@"WebSubresources"]];
        NSPredicate *iPredicate = [NSPredicate predicateWithFormat:@"WebResourceMIMEType like 'image*'"];
        NSArray *imagesArray = [subItems filteredArrayUsingPredicate:iPredicate];
        for (int i=0; i<[imagesArray count]; i++) {
            NSDictionary *sItem = [NSDictionary dictionaryWithDictionary:[imagesArray objectAtIndex:i]];
            UIImage *sImage = [UIImage imageWithData:[sItem valueForKey:@"WebResourceData"]];
           //handle images
        }
    }

}
4
追加された

あなたはこれを試すことができます:

NSData *data = (NSData *) [dict objectForKey:[[dict allKeys] objectAtIndex:0]];
1
追加された
関連する型が allKeys 配列の最初のものであると想定してはいけません。
追加された 著者 Peter Hosey,

For reference, a 3rd party standalone library to access WebArchives on iOS exists: http://www.cocoanetics.com/2011/09/decoding-safaris-pasteboard-format/ https://github.com/Cocoanetics/DTWebArchive

1
追加された

Check out the WebKit documentation here: WebArchive Class Reference

これはiOSの「プライベート」クラスであることに注意してください。このオブジェクトにメッセージを送信したり、他の方法でメッセージをやりとりしたりすることは、審査であなたのアプリが拒否された原因となる可能性があります。

0
追加された
ありがとうございますが、iOSではWebDataSourceClassのインスタンスを作成するように見えますか?
追加された 著者 RunLoop,
うーん、私の質問を解決するためにあなたの答えをどうすればいいですか?
追加された 著者 RunLoop,
私はアーカイブのdictにあるキーと値を決定して、通常のdictとして再作成してUIPasteBoardに配置できるようにしたい
追加された 著者 RunLoop,
いいえ、もう一度、iOSのプライベートAPIです。 UIWebViewはMac OSのそれよりはるかに不透明です。
追加された 著者 Wayne Hartman,
@Run Loop - あなたはウェブアーカイブから抜け出そうとしていますか?
追加された 著者 Wayne Hartman,
@RunループWebArchiveにはWebResourceオブジェクトの配列があります。これには、Webページや画像のテキストデータが含まれます。値のNSDictionaryではありません。
追加された 著者 Wayne Hartman,