(iOS)在UIWebView中运行bookmarklets?

时间:2012-04-01 17:08:36

标签: javascript iphone ios uiwebview bookmarklet

我正在尝试添加与我的网络浏览器兼容的可读性(第三方应用),并且我追踪了一个书签以将页面保存为可读性:

  

的javascript:(%28function%28%29%7Bwindow.baseUrl%3D%27http%3A // www.readability.com%27%3Bwindow.readabilityToken%3D%27bbRmvVb9nTNRWSVEGb9yrcFP4USUHnTjk2EVWXjn%27%3Bvar%20S%3Ddocument.createElement% 28%27script%27%29%3Bs.setAttribute%28%27type%27%2C%27text / JavaScript的%27%29%3Bs.setAttribute%28%27charset%27%2C%27UTF-8%27%29%3BS。的setAttribute%28%27src%27%2CbaseUrl%2B%27 /书签/ read.js%27%29%3Bdocument.documentElement.appendChild%28S%29%3B%7D%29%28%29)

然而,我似乎无法让它发挥作用。它适用于桌面Safari和移动/ iPhone Safari。但是下面的两种方法都没有做任何事情:

  

[webview stringByEvaluatingJavaScriptFromString:readability];

     

[webview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:readability]]];

(可读性是一个带有上述值的字符串)

是否有另一种方法可以运行我不知道的javascript bookmarklet或者我做错了什么?非常感谢帮助。

2 个答案:

答案 0 :(得分:1)

格雷格

你得到这个错误是因为javascript url是编码的,你应该解码javascript字符串,(可能你使用NSURL来传递字符串,所以它是由NSURL编码的)

然后使用webview stringByEvaluatingJavaScriptFromString,这个解决方案运行良好

-(void)loadUrl:(NSURL*)url
{
    if ([[url scheme] isEqualToString:@"javascript"])

    {
        NSRange range = [[url absoluteString] rangeOfString:@"javascript:"];
        NSString *javaScriptString = [[[url absoluteString] substringFromIndex:range.location + range.length] URLDecodedString];
        [self stringByEvaluatingJavaScriptFromString:javaScriptString];
    }
    else
    {
        [self loadRequest:[NSURLRequest requestWithURL:url]];
    }
}

答案 1 :(得分:0)

您可能需要使用他们的API。出于安全原因,您可能会阻止您尝试执行的操作,并且您需要在请求中放置自己的API密钥。