- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个 Objective C 应用程序,它在用户滚动浏览时将大型 HTML 文档加载到 UIWebView 中。这是因为该文档是 20Mb,如果一次加载所有文档,它往往会导致 webview 崩溃。这个想法是将文档分成 HTML block ,当用户滚动浏览它时,新元素将添加到文档中,旧元素将被删除。
目前我正在努力让 Objective C 应用程序将数据传递给文档中的 javascript 函数。我有以下 Objective-C 代码:
- (BOOL)webView:(UIWebView *)webView2
shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType {
NSString *url = [[request URL] absoluteString];
// Intercept custom location change, URL begins with "js-call:"
if ([url hasPrefix:@"js-call:"]) {
// Extract the selector name from the URL
NSArray *components = [url componentsSeparatedByString:@":"];
NSString *function = [components objectAtIndex:1];
// Call the given selector
[self performSelector:NSSelectorFromString(function)];
// Cancel the location change
return NO;
}
// Accept this location change
return YES;
}
- (void)loadNext {
int endIndex = [self.partIndexEnd intValue];
int newEndIndex = endIndex + 9;
if (newEndIndex >= [self.parts count] - 2){
newEndIndex = [self.parts count] - 2;
}
if (endIndex == newEndIndex){
return; // Already at the end of the document
}
int splitLen = 300;
NSRange range = NSMakeRange(endIndex, newEndIndex - endIndex);
for (NSString *html in [self.parts subarrayWithRange:range]) {
NSLog(@"%@", html);
NSString *htmlToSplit = html;
while ([htmlToSplit length] > 0) {
NSString *curHtml;
if ([htmlToSplit length] <= splitLen){
curHtml = htmlToSplit;
htmlToSplit = @"";
}
else {
curHtml = [htmlToSplit substringToIndex:splitLen + 1];
htmlToSplit = [htmlToSplit substringFromIndex:splitLen - 1];
}
NSString* result = [self.web stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"next('%@');", [curHtml gtm_stringByEscapingForAsciiHTML]]];
NSLog(@"START %@ END %@", curHtml, result);
}
}
[self.web stringByEvaluatingJavaScriptFromString:@"next(null);"];
NSLog(@"HTML = %@ *END*", [self.web stringByEvaluatingJavaScriptFromString:@"$('body').html();"]);
}
我在文档中有以下 javascript:
var nextHtmlToAdd = '';
function next(html){
var retval = '';
try{
if (html){
if (html.match(/teststring/i)){
alert('teststring');
}
nextHtmlToAdd = nextHtmlToAdd + html;
retVal = 'appended';
alert(html);
} else {
// Finished sending HTML
alert('finished');
if (nextHtmlToAdd.match(/teststring/i)){
alert('encoded html contains teststring');
}
nextHtmlToAdd = $("<div/>").html(nextHtmlToAdd).text();
if (nextHtmlToAdd.match(/teststring/i)){
alert('html contains teststring');
}
alert(nextHtmlToAdd);
var elem = $(nextHtmlToAdd);
$('.endofsections').before(elem);
if (elem.text().match(/teststring/i)){
alert('element contains teststring');
}
if ($(document).text().match(/teststring/i)){
alert('document contains teststring');
}
nextHtmlToAdd = '';
retVal = 'finished';
}
} catch (err) {
alert('Error: ' + err.description);
retVal = 'error';
}
return retVal;
}
使用以下代码在 jQuery 的 $(document).ready() 事件中触发 Objective C 代码:
var iframe = document.createElement("IFRAME");
iframe.setAttribute("src", "js-call:loadNext");
document.documentElement.appendChild(iframe);
iframe.parentNode.removeChild(iframe);
iframe = null;
如果我单步执行代码,那么我看到的是正在运行的 stringByEvaluatingJavaScriptFromString 方法,结果返回“附加”或者有时返回的指针无效。 Web View 中没有出现任何警报,并且 html 没有附加到 nextHtmlToAdd,只有 HTML 的第一位似乎正确地传递给了 UIWebView。
我想知道的是,stringByEvaluatingJavaScriptFromString 可以执行的 javascript 字符串的长度或执行次数是否有限制?有没有其他方法可以做到这一点?
谢谢,
乔
最佳答案
是的,stringByEvaluatingJavaScriptFromString
方法有一些限制。您需要了解的两个:
在前者中,您会生成一个异常,但在后者中,它可能会“无声地”失败。你在测试方法的返回值吗?如果失败,它将返回 nil
。这是查看您的脚本是否由于上述原因之一而被操作系统终止的有用方法。
关于javascript - stringByEvaluatingJavaScriptFromString 似乎并不总是有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7388743/
我编写应用程序,我需要加载相同的 HTML 页面。比需要采取的元素。 getElementById(\"orderData\") let webView = UIWebView() let
这个表达方式似乎不起作用。它是 Mac 应用程序,而不是 iPhone 应用程序。 [[mainWebView mainFrame] stringByEvaluatingJavaScriptFromS
我正在尝试使用这行代码 [webView stringByEvaluatingJavaScriptFromString:@"test();"]; 但它不起作用。我有多个 javascript 文件,但
我正在开发一个 Objective C 应用程序,它在用户滚动浏览时将大型 HTML 文档加载到 UIWebView 中。这是因为该文档是 20Mb,如果一次加载所有文档,它往往会导致 webview
所以我有以下文件,其中包含以下 javascript (function getradiovalue(myvalue) { alert(myvalue); return myvalue; }) 我的
我已将一个网页加载到我的 UIWebView 中,该页面包含许多输入标签。我想确定看起来像的那个: 你知道我会在 stringByEvaluatingJavaScriptFromString 中写什
我在下面设置了我的 UIWebView 的代码: - (void)webViewDidFinishLoad:(UIWebView *)webView { [webView stringByEv
我正在 iOS 上构建混合原生/HTML5 应用程序。作为 native /HTML5 桥的一部分,我正在通过 stringByEvaluatingJavaScriptFromString 执行一些
我有 WebView 加载 html。缩放后 html -(void)webViewDidFinishLoad:(UIWebView *)webView { [self setupConten
我知道这里已经发布了类似的问题,但我查看了以前的主题,但找不到答案。我正在尝试在 swift 中使用 stringByEvaluatingJavaScriptFromString,但它不起作用。请帮忙
我的应用程序的用户尝试加载的网页包含以下链接: 它尝试调用这个 javascript block : function DoSubmitScr(scrval) { GlobalHelpUrl
我在 iPhone 中使用 UIWebView 并从资源加载一个 HTML 页面。 以下是我的HTML页面代码: function callme(id) { var input =
我坚持让一些非常基本的 JS 在我的 UIWebView 中运行。在 WebView 的委托(delegate)中,我有: - (void)webViewDidFinishLoad:(UIWebVie
我尝试在我的 WebView 上使用一些 javascript 和新的 stringByEvaluatingJavaScriptFromString 函数 我不太熟悉语法,所以我尝试了 func s
我正在尝试从 UIWebView 中加载的本地 html 文件调用 javascript 函数但它没有反应 看起来像这样 NSString *script=[NSString stringWithFo
为什么这段代码不起作用?它显示 Google 屏幕,但不会更改文本框值。我通过在 Safari 中运行 JS 来确认它确实可以工作,并且该代码似乎可以工作,因为运行alert('hi') 确实可以工作
我将 Uiwebview 放置在 UIscrollview 中,因为在 uiwebview 之后我想使用 PageController 显示一些图像。 我正在使用这行代码。 -(void)web
我遇到了一个奇怪的问题。我目前正在 iPhone 上开发 Mapkit。我需要在 map 中显示两条路线,其中有一个源城市和两个不同的目的地。对于两个城市之间的路线,我的代码很好。为此,我在代码中的一
我正在尝试实现一个相对简单的结果 - 在加载页面时关注文本框。我使用这段代码: [_webView setKeyboardDisplayRequiresUserAction:NO]; NSString
在我的 iOS 应用程序(一种闪存卡应用程序)中,我使用 UIWebView ,一旦 webview 内容加载完成,我需要执行一些 UI 操作(更改)。 我正在 webViewDidFinishLoa
我是一名优秀的程序员,十分优秀!