我想在UIWebView
中打开一个网站,但我不想从应用程序的Documents文件夹(由于带宽)加载JavaScript文件。这可能吗?iOS:用本地JavaScript文件打开UIWebView
2
A
回答
4
是的,您需要创建一个自定义NSURLProtocol
,如本帖子所示:https://stackoverflow.com/a/5573155/244160。根据示例,在canInitWithRequest:
中进行适当的检查,然后按照正确的内容类型提供您的Javascript。
更新:
这里有一个快速打一枪换一个简单的实现:
@interface LocalJSURLProtocol : NSURLProtocol
@end
@implementation LocalJSURLProtocol
+ (BOOL)canInitWithRequest:(NSURLRequest *)request
{
return [request.URL.scheme caseInsensitiveCompare:@"http"] == NSOrderedSame && [request.URL.lastPathComponent hasSuffix:@"js"]);
}
+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request
{
return request;
}
- (void)startLoading
{
NSURLRequest *request = self.request;
NSURLResponse *response = [[NSURLResponse alloc] initWithURL:[request URL]
MIMEType:@"text/javascript"
expectedContentLength:-1
textEncodingName:nil];
NSString *localFilePath = [[NSBundle mainBundle] pathForResource:@"sample.js" ofType:nil];
NSData *data = [NSData dataWithContentsOfFile:localFilePath];
[self.client URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageNotAllowed];
[self.client URLProtocol:self didLoadData:data];
[self.client URLProtocolDidFinishLoading:self];
}
- (void)stopLoading
{
}
@end
你开始加载之前这样注册[NSURLProtocol registerClass:[LocalJSURLProtocol class]];
的协议。这将拦截UIWebView中的请求,并且您有机会为请求文件注入自己的Javascript代码。
-1
(请参阅下面我的编辑 - 有可能与当地的资产和远程HTML文件的工作,通过使用自定义协议)
这是不可能使用本地的js文件(或任何本地文件)在互联网上的文件。这与您无法从常规桌面浏览器在网站上打开本地JavaScript文件的事实类似。
你可以做的是调用你的网站的页面,将响应的html保存为本地html文件(在你的文档文件夹中),并将js url更改为本地。该网址应该是相对的。 例如:
documents
- myapp
-- index.html
-- scripts.js
里面的index.html你可以改变JS SRC是:
<script src="scripts.js" />
- 评论:
- 我认为你可以访问和编辑网页。
- 如果本地js文件没有下载,您可以做一个很好的回退。
<script src="jquery-2.0.0.min.js"></script> <script> if (typeof jQuery == 'undefined') { document.write(unescape("%3Cscript src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-2.0.0.min.js'
类型= '文/ JavaScript的' %3E%3C/SCRIPT%3E“));}
希望帮助
!编辑:
后审查这一post,你也许能够从远程HTML文件访问本地文件(在他的榜样,他正在与本地的HTML文件,但它可能会用遥控器上以及工作)
相关问题
- 1. 从uiwebview(iOs)打印本地html文件
- 2. 使用Javascript打开本地文件
- 3. 使用javascript打开本地xml文件
- 4. 在JavaScript中打开本地文件
- 5. 使用Javascript或PHP打开本地文本文件
- 6. 打开本地文件
- 7. 本地文件打开IE
- 8. 打开本地文件Android
- 9. 打开本地HTML文件
- 10. 本地javascript无法打开本地文件
- 11. JavaScript的本地文件访问和打开文件
- 12. 在javascript中打开本地文件系统中的文件
- 13. 用open-uri打开本地文件
- 14. 使用AIR/Flex打开本地文件
- 15. UIWebView加载本地文件
- 16. 用iOS中的Cordova打开本地pdf
- 17. 安卓:打开本地地图文件
- 18. 如何用Javascript打开本地磁盘文件?
- 19. 使用Javascript打开本地MS Access文件
- 20. iOS - SDK - 如何在UIWebView中打开大型基调文件?
- 21. iOS:从UIWebView打开Facebook本机应用程序共享链接
- 22. 从本地html文件打开本地pdf文件
- 23. Xcode uiwebView本地文件不起作用
- 24. 用CSS本地文件加载UIWebView
- 25. 如何在iOS上的Office中打开本地文件
- 26. 在uiwebview中打开Keynote文件
- 27. 如何在UIWebView中打开文件?
- 28. 在UIWebView中打开RTFD文件
- 29. UIWebView从文件中打开url
- 30. iOS - 展开本地XML文件
这很好。我使用'[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:jsFile]'获得localFilePath。我将'js'文件添加到'Copy Bundle resources',它们不会自动添加。谢谢! – McDermott