Я получил диапазон выделенного текста из UIWebView, используя следующую функцию java-скрипта:
function getRangeForSelectedText() {
var selection = window.getSelection();
var range = selection.getRangeAt(0);
}
Я должен сохранить этот диапазон для последующего использования (я хочу использовать этот диапазон, чтобы выделить текст, когда пользователь загружает документ позже). Как я могу сохранить объект java-скрипта (диапазон) в объекте C?
Есть ли какой-либо другой метод для подсветки текста в UIWebview, кроме заданного диапазона?
Я столкнулся с такой же проблемой. Вместо того, чтобы получать выбранный диапазон, я просто выделил выделенный текст, используя нижеследующую функцию в 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"];
}
Просто замените старую строку html на highlightString.
и что Как вызвать Objective-C из Javascript?
вы можете отправить некоторую строку в свой UIWebView, используя скрипт
function sendURLToUIWebView(url) {
var iframe = document.createElement("IFRAME");
iframe.setAttribute("src", url);
document.documentElement.appendChild(iframe);
iframe.parentNode.removeChild(iframe);
}
ваш url должен иметь определенную схему fe 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();