Inject html into UIWebVeiw

Inject html into UIWebVeiw

本文关键字:UIWebVeiw into html Inject      更新时间:2023-09-26

我有一个UIWebView,我试图注入一些html代码。我有一个首先加载的模板文件,然后我想通过它们的ID来改变元素的内容。

以下是我的代码,在webViewDidFinishLoad::
    NSString *injectDetails = [NSString stringWithFormat:
                         @"document.getElementById('details').innerHTML = '"%@'";", searchResult.details];
    [webView stringByEvaluatingJavaScriptFromString:injectDetails];

我试过通过转义引号,这也不起作用:

    NSString *injectDetails = [NSString stringWithFormat:
                         @"document.getElementById('details').innerHTML = '"%@'";", [searchResult.details stringByReplacingOccurrencesOfString:@"'"" withString:@"'''""]];
    [webView stringByEvaluatingJavaScriptFromString:injectDetails];

我可以注入纯文本,它可以工作。不能工作的html是一个很长的字符串,我最初只是使用[webView loadHTMLString:aDescription baseURL:NULL];加载,工作得很好。

我需要做什么使这个工作与html?

我只是有同样的问题,当试图添加样式文档的头部。所以我只是用''"(在脚本中看起来像'")来逃避所有双配额。参见下面的代码:

NSString *js = @" <style type='''"text/css'''"> * { -webkit-touch-callout: none; -webkit-user-select: none; } </style> ";
[_webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.head.innerHTML = document.head.innerHTML+'"%@'"",js]];

试试下面这行代码。

NSString *imagePath = [[NSBundle mainBundle] resourcePath];
imagePath = [imagePath stringByReplacingOccurrencesOfString:@"/" withString:@"//"];
imagePath = [imagePath stringByReplacingOccurrencesOfString:@" " withString:@"%20"];
NSString *HTMLData = @"Hello this is a test<img src="sample.jpg" alt="" width="100" height="100" />";
[webView loadHTMLString:HTMLData baseURL:[NSURL URLWithString: [NSString stringWithFormat:@"file:/%@//",imagePath]]];

1号线这将获得主bundle根文件夹的路径。

第2行我们需要双斜杠在UIWebView中正确工作,所以我们正在搜索"/"的所有实例,并将其替换为"//"

第3行与上面的处理相同,但我们正在搜索一个空格并将其替换为相当于%20

的HTML。

4号线这是把一些样本数据放在一起为我们的UIWebView,你会看到我们已经设置了图像源为我们的"sample.jpg"文件,因为它位于根文件夹中,如果它在一个名为"images"的文件夹中,我们需要将源设置为"images//sample.jpg"。记住那两刀!

第5行这与我在教程中的例子非常相似,尽管我们将baseURL设置为应用程序包的根目录,但这允许我们相对地引用所有内容,而不是绝对路径。

使用上面的代码你可以这样做…