我正在尝试使用window.location将JavaScript从JavaScript传递到Objective C. 我的JavaScript代码如下所示:
var str = "http://sampleurl:8080/abc";
window.location.href = "jscall:myapp:"+str;
在目标C中:
NSString *requestString = [[request URL] absoluteString];
NSArray *components = [requestString componentsSeparatedByString:@":"];
if ([components count] > 1 &&
[(NSString *)[components objectAtIndex:0] isEqualToString:@"jscall"]) {
if([(NSString *)[components objectAtIndex:1] isEqualToString:@"myapp"])
{
NSLog([components objectAtIndex:2]); //this returns just "http"
NSString* str1 = (NSString *)[components objectAtIndex:2];
NSString* str2 = (NSString *)[components objectAtIndex:3];
NSString* str3 = (NSString *)[components objectAtIndex:4];
str2 = [str2 stringByAppendingString:@":"];
str2 = [str2 stringByAppendingString:str3];
str1 = [str1 stringByAppendingString:@":"];
self.jsLbl.text = [str1 stringByAppendingString:str2];
//The output of this is "http://sampleurl:8080/abc"
}
return NO;
}
如果我只使用
NSString* str1 = (NSString *)[components objectAtIndex:2];
我只得到“http”。 如何限制字符串以限制componentsSeparatedByString 2?
答案 0 :(得分:2)
您无法明确地仅拆分前两次出现的':',但您可以轻松做的就是使用另一种方法,因为您确切知道该字符串到底是什么' http'。只做以下其中一项是安全的。
NSString *urlString = [requestString stringByReplacingOccurrencesOfString:@"jscall:myapp:" withString:@""];
或
NSUInteger prefixLength = @"jscall:myapp:".length;
NSString *urlString = [requestString substringFromIndex:prefixLength];
第二个更可靠,因为某些原因在请求中多次出现该字符串。
答案 1 :(得分:0)
请勿使用componentsSeparatedByString:
来解析网址。使用NSURLComponents
。
答案 2 :(得分:0)
你通常不会这样做:
var str = "http://sampleurl:8080/abc";
window.location.href = "jscall:myapp:"+str;
您改为使用自定义方案,以便您的代码可以检查如何处理网址,例如:
var str = "myapplink://sampleurl:8080/abc";
window.location.href = str;
并且您的obj-c代码将检查该方案,然后使用该URL,如果您需要,则用其他方法替换该方案。