我使用以下java脚本函数从UIWebView获取所选文本的范围:
function getRangeForSelectedText() {
var selection = window.getSelection();
var range = selection.getRangeAt(0);
}
我必须保存此范围以供以后使用(我希望在用户稍后加载文档时使用此范围突出显示文本)。如何在目标C中保存java脚本对象(范围)?
除了给出范围外,还有其他方法可以在UIWebview中高亮显示文本吗?
答案 0 :(得分:0)
和How to call Objective-C from Javascript?
您可以使用脚本
将一些字符串发送到UIWebViewfunction sendURLToUIWebView(url) {
var iframe = document.createElement("IFRAME");
iframe.setAttribute("src", url);
document.documentElement.appendChild(iframe);
iframe.parentNode.removeChild(iframe);
}
你的网址应具有特定的方案f.e. myappcomand://
你可以使用UIWebViewDelegate
方法处理它(将一些对象设置为UIWebView的委托,例如一些UIViewController)
- (BOOL)webView:(UIWebView *)aWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
BOOL shouldLoad = YES;
if ([request.URL.scheme isEqualToString:@"myappcomand"]) {
shouldLoad = NO;
// parse url string "request.URL" and extract your parameters to store them
}
return shouldLoad;
}
你的javascript函数
function sendURLToUIWebView(url) {
var iframe = document.createElement("IFRAME");
iframe.setAttribute("src", url);
document.documentElement.appendChild(iframe);
iframe.parentNode.removeChild(iframe);
}
function getRangeForSelectedText() {
var selection = window.getSelection();
var range = selection.getRangeAt(0);
var url = "myappcomand://" + "range=" + range; // you should convert range to string
sendURLToUIWebView(url);
}
<强>更新强>
范围到字符串
range.toString().replace(/\s+/g, ' ').replace(/^\s+|\s+$/g, '')
或仅var rangeText = window.getSelection().toString();
答案 1 :(得分:0)
我遇到了同样的问题。我只是在js中使用以下函数突出显示所选文本,并在UIWebView中获取全文,并在sqlite中替换它,而不是获取选定范围。
JS代码:
function highlight() {
if (typeof window.getSelection != "undefined") {
var range = window.getSelection().getRangeAt(0);
var selectionContents = range.extractContents();
var span = document.createElement("span");
span.appendChild(selectionContents);
span.setAttribute("class","uiWebviewHighlight");
span.style.backgroundColor = "rgb(237,191,245)";
span.style.color = "black";
range.insertNode(span);
}
}
目标C:
- (void) highlightText
{
NSString *highlightFunction = [NSString stringWithFormat:@"highlight()"];
[detailedWebView stringByEvaluatingJavaScriptFromString:startSearch];
NSString *highlightedString = [detailedWebView
stringByEvaluatingJavaScriptFromString:@"document.documentElement.outerHTML"];
}
只需用highlightString替换旧的html字符串。