代码片段使用复杂的 JavaScript 在 UIWebView 中插入 HTML?
Posted
技术标签:
【中文标题】代码片段使用复杂的 JavaScript 在 UIWebView 中插入 HTML?【英文标题】:Code Snippet to use complex JavaScript to insert HTML inside UIWebView? 【发布时间】:2011-08-15 16:43:18 【问题描述】:我必须使用 UIWebView 和 javascript 做一些复杂的工作,并且当我尝试插入涉及 JQuery 和 html Snippets 的复杂 Javascripts 本身包含 JavaScript 时总是会遇到问题。我似乎从来没有足够的引号和单引号符号,并且放入脚本元素有点痛苦。
我有一个神奇的 Objective-C sn-p,或者更简单的复制粘贴方式来使用您用于此类任务的更复杂的脚本?
编辑:为了解释更多,我有大量的 HTML sn-ps(还包含 Javascript 和 <a href="javascript:doSomething('stupid')")>
之类的东西,我需要在 UIWebView 中加载网站后通过 JavaScript 将它们放入 DOM。
我现在的方法是将 HTML 内容放入文件中,重写它们,例如,我在 JS 变量中有“愚蠢”,因此我不需要额外的单引号,将占位符放置到位,如 ###placeholder1 ###,将该文件加载到 NSString 中,并用我的应用程序中通过html = [html stringByReplacingOccurrencesOfString:@"###placeholder1###" withString:dynamicStuffHtml];
生成的动态数据替换这些占位符。之前的动态数据不包含单引号,除了在文本内容中,我将单引号替换为 HTML 编码的&#39;
。
然后我尝试通过这样做将整个字符串放入 DOM:
NSString* javascript = [NSString stringWithFormat:@"%@%@%@",@"jQuery('.focus_box').first().before('",html,@"');"];
[webView stringByEvaluatingJavaScriptFromString:javascript];
这适用于简单和简短的示例(例如,当我放入短段落或简单的 HTML 时),但对于大约 50-60 行的完整 HTML sn-p,它就是行不通的。此外,所有这些编辑、替换、修补和填充让我认为,也许使用 UIWebViews 和 JavaScript 的人有更好的解决方案,而且众所周知。
再次编辑:我开始了赏金,因为我不敢相信 UIWebView 的用法如此之少以至于没有人对此有答案,或者已经有一个大型私有工具类来处理如此复杂的 JavaScript 交互,其中无需重新加载即可包含大块 HTML。 :-)
【问题讨论】:
您是否有权访问 HTML 页面,即它们是否是第三方网站? 不能只用jquery的负载吗?$('.selector').load('/path/to/file',callback);
您可以在其中加载完整的 html 文件,其中包含额外的 javascript,并且您不必担心任何额外的序列化。只需编写文件,就好像它是它自己的文档一样。但是,您的全局 JS 库只需要加载到您的主文档中。
部分,我可以访问(我的应用程序中有 HTML 页面是我在应用程序中构建的,假设我想用应用程序中生成的新的大 HTML 内容更新它而不重新加载页面),并且部分使用了外部网站(当我在其原始页面上显示外部内容时,我还想包含一些 HTML 和可能更大的 JavaScript 或两个来处理用户操作)。 ... jQuery 的负载从服务器加载数据,但我想将 在我的 iPad 应用程序中 生成的 HTML 粘贴到页面中,而不是从某些服务器应用程序获取的数据。
我遇到了同样的问题。我发现将 HTML 作为常规 NSString 进行编辑然后调用 loadHTMLString:
更快、更轻松。 webview 将滚动到顶部,但我能够将其淡出,加载 HTML,然后使用新内容再次淡入,看起来还不错。
好主意,如果不出意外我可能会这样做。
【参考方案1】:
要在 UIWebView 中加载一些文件表单,请执行以下操作
<script language="javascript" type="text/javascript">
var bundlePath = "here_goes_full_path_to_your_bundle";
// It should be something like file:///var/.../YouApp.app
// Set it from your code
jQuery.get(bundlePath + "/someFile.html", function(data) alert(data););
</script>
【讨论】:
这意味着我需要将生成的 HTML 写入一个文件,以便能够通过 jQuery 加载它。它没有预期的那么好,但也许它会起作用。明天试试。【参考方案2】:我为内部资料创建了一些网站,这些网站过度使用了这种技术。我遇到的最大问题是正确获取封装的引号,因为您的所有引号都必须被屏蔽(使用 )
这是一个小sn-p:
code += "<table onclick='gbyid(\"suchfeld " + parametername + "\").value = \"\", " + parametername + " = \"\"'><tr><td>Delete Date</td></tr></table>"
我不知道,这是否有帮助,但“它只是不起作用”并不是什么大提示 :)
【讨论】:
以上是关于代码片段使用复杂的 JavaScript 在 UIWebView 中插入 HTML?的主要内容,如果未能解决你的问题,请参考以下文章