如何在 iOS 的 UIWebView 的文档目录中使用 Javascript?

Posted

技术标签:

【中文标题】如何在 iOS 的 UIWebView 的文档目录中使用 Javascript?【英文标题】:How to use Javascript from document directory in UIWebView in iOS? 【发布时间】:2013-02-14 07:35:05 【问题描述】:

在我的应用程序中,我必须更改从在线加载的网页的字体。

首先,我将我的 CustomJava.js 文件存储在在线托管中,然后我使用该文件来更改我的 ios 应用程序中的字体。

这是我的一些代码。

- (void)webViewDidFinishLoad:(UIWebView *)webView
  
    NSString *js = [NSString stringWithFormat:@"var script = document.createElement('script');"
                    "script.type = 'text/javascript';"
    "script.src = 'http://www.gustohei.com/SYjs/customJava.js';"];

    js = [NSString stringWithFormat:@"%@ document.getElementsByTagName('head')[0].appendChild(script);", js];
    [self.webViewOfBrowser stringByEvaluatingJavaScriptFromString:js];

    UIApplication *app = [UIApplication sharedApplication];
    app.networkActivityIndicatorVisible = NO;

很好,可以正确更改字体。

就我而言,我想将该 JS 文件保留在我的文档目录中,并希望使用文档目录中的该文件。我不想从网上使用。

所以我写了以下代码。

- (void)webViewDidFinishLoad:(UIWebView *)webView

    NSString *jsPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"customJava.js"];

    NSString *js = [NSString stringWithFormat:@"var script = document.createElement('script');"
                    "script.type = 'text/javascript';"
                    "script.src ='%@'",jsPath];

    js = [NSString stringWithFormat:@"%@ document.getElementsByTagName('head')[0].appendChild(script);", js];
    [self.webViewOfBrowser stringByEvaluatingJavaScriptFromString:js];

    UIApplication *app = [UIApplication sharedApplication];
    app.networkActivityIndicatorVisible = NO;

但是它不起作用。 该怎么做?

【问题讨论】:

【参考方案1】:
    在 Xcode 的项目导航器(左栏)中单击蓝色项目图标。 在主窗口中选择“构建阶段”选项卡 打开“编译源”部分 在列表中找到您的 Javascript 文件并将其删除。 打开“复制捆绑资源”部分 将您的 Javascript 文件添加到列表中

然后使用以下代码加载js文件

[[NSBundle mainBundle] pathForResource:@"script.js" ofType:nil];

更新: 现在,Xcode 4.5 会在您将 javascript 文件添加到项目中而不将其从“编译源”部分中删除时创建警告:

警告:没有规则来处理类型文件“FILEPATH” 架构 armv7 的 sourcecode.javascript

【讨论】:

这不是工作兄弟。我像你说的那样将相同的 JS 文件加载到 Bundle 中。但是当我使用 Online 的 JS 文件时,字体并没有改变。 此链接可能会对您有所帮助***.com/questions/5733883/…【参考方案2】:

将 javascript 文件和 html 保存在文档目录中的同一文件夹中,只需将 javascript 包含在您通过 webview 加载的 HTML 中

<script src = "CustomJava.js" type="application/javascript"></script>

然后像这样在代码中调用 javascript 函数:(例如“changeFont();”是您要通过 webview 调用的函数的名称)

   NSString *javascriptFunctionCall = [NSString stringWithFormat:@"changeFont('%@');",self.fontSize];

   [bookWebView stringByEvaluatingJavaScriptFromString:javascriptFunctionCall];

【讨论】:

我不明白你的意思兄弟?我正在从 web 加载页面,并希望在 UIWebView 中将 js 代码插入到从 web 加载的页面中。 我正在加载网页浏览器之类的页面,并希望将我的 JS 代码附加到 UIWebView 中加载的页面中。 好的,你不能从网络编辑页面吗?它不只托管在您的服务器上? 没有。当我将 JS 文件保存在主机中并读取该 js 文件并附加到我加载的页面时,我可以追加,这很好。我想处理本地文件。不是来自托管。 哦!!!那么我不认为给 script.src 提供本地路径会像你一样工作!我需要考虑是否可能

以上是关于如何在 iOS 的 UIWebView 的文档目录中使用 Javascript?的主要内容,如果未能解决你的问题,请参考以下文章

UIWebview 如何在 iOS 中进行渲染?

UIWebView 能否用于在 iOS 应用中查看和编辑 XML 文档

如何使用 Xamarin iOS 在 UIWebView 中加载本地 xlsx 文件

UIWebView“无法读取文档”错误

IOS客户端UIwebview下web页面闪屏问题

从 Documents 目录在 UIWebview 中打开时,ios-css 和 js 无法在 html 文件中链接