-1

Webviewデリゲートshouldstartloadwithrequestは HTML から URL を受け取り、リクエストを確認するとすべてが小文字に変換されています。

- (BOOL) webView: (UIWebView *) webView shouldStartLoadWithRequest:(NSURLRequest *) request navigationType: (UIWebViewNavigationType) navigationType {
    // Only do something if a link has been clicked
    if (navigationType == UIWebViewNavigationTypeLinkClicked) {
        NSString *link = [[request URL] absoluteString];
        if ([link hasPrefix:@"playSound:"]) {
            [PlayAudio playAudio: [link substringFromIndex:10]];
            return NO;
        }
    }
    return YES;
}

問題を起こす行は

NSString *link = [[request URL] absoluteString];

クリックしたリンクの変更されていないコピーを取得する前に。iOS3 と iOS4 でも同じです。ただし、iOS5 では小文字のみに変換されます。次の行

if ([link hasPrefix:@"playSound:"]) {

真になることはありません。そのため、コードを次のように変更する必要がありました

- (BOOL) webView: (UIWebView *) webView shouldStartLoadWithRequest:(NSURLRequest *) request navigationType: (UIWebViewNavigationType) navigationType {
    // Only do something if a link has been clicked
    if (navigationType == UIWebViewNavigationTypeLinkClicked) {
        NSString *link = [[[request URL] absoluteString] lowercaseString];
        if ([link hasPrefix:@"playsound:"]) {
            [PlayAudio playAudio: [link substringFromIndex:10]];
            return NO;
        }
    }
    return YES;
}
4

2 に答える 2

1

これは、iOS 5 の safari へのアップグレードの一部として行われた変更であり、URL の仕様と一致しています。URL スキームは常に小文字に変換されます。

(この変更のため、多くのコードを修正する必要がありました)

于 2013-07-08T12:22:53.547 に答える
0
if ([link hasPrefix:@"playsound:"] ||[link hasPrefix:@"playSound:"] )
{
    [PlayAudio playAudio: [link substringFromIndex:10]];
        return NO;
}
于 2013-07-08T12:19:06.927 に答える