При попытке вызвать функцию MyApp_HighlightAllOccurencesOfString() из WebView
String textToSearch = editTextSearchInText.getText().toString();
webSettings.setJavaScriptEnabled(true);
article_web_view.evaluateJavascript("MyApp_HighlightAllOccurencesOfString('" + textToSearch + "')", new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
Toast.makeText(getBaseContext(), s, Toast.LENGTH_LONG).show();
}
});
Возвращается null, а в консоли следующее:
"Uncaught ReferenceError: MyApp_HighlightAllOccurencesOfString is not defined", source: (1)
Подскажите, пожалуйста, как правильно вызвать функцию JS из WebView? Почему возникает ошибка "функция не определена"? Код JS из WebView ниже:
<script >
var MyApp_SearchResultCount = 0;
function MyApp_HighlightAllOccurencesOfStringForElement (element, keyword){
if (element) {
if (element.nodeType == 3) {
while (true) {
var value = element.nodeValue;
var idx = value.toLowerCase().indexOf(keyword);
if (idx < 0) break;
var span = document.createElement("span");
var text = document.createTextNode(value.substr(idx, keyword.length));
span.appendChild(text);
span.setAttribute("class", "MyAppHighlight");
span.style.backgroundColor = "#C5DFEA";
text = document.createTextNode(value.substr(idx + keyword.length));
element.deleteData(idx, value.length - idx);
var next = element.nextSibling;
element.parentNode.insertBefore(span, next);
element.parentNode.insertBefore(text, next);
element = text;
window.scrollTo(0, findPos(span));
MyApp_SearchResultCount++;
}
} else if (element.nodeType == 1) {
if (element.style.display != "none" && element.nodeName.toLowerCase() != "select") {
for (var i = element.childNodes.length - 1; i >= 0; i--) {
MyApp_HighlightAllOccurencesOfStringForElement(element.childNodes[i], keyword);
}
}
}
}
}
function findPos (obj) {var curtop = -100; if (obj.offsetParent) {
do {
curtop += obj.offsetTop;
} while (obj = obj.offsetParent);
return[curtop];
}}
function MyApp_HighlightAllOccurencesOfString (keyword) {MyApp_RemoveAllHighlights();
MyApp_HighlightAllOccurencesOfStringForElement(document.body, keyword.toLowerCase());}function MyApp_RemoveAllHighlightsForElement (element) {
if (element) {
if (element.nodeType == 1) {
if (element.getAttribute("class") == "MyAppHighlight") {
var text = element.removeChild(element.firstChild);
element.parentNode.insertBefore(text, element);
element.parentNode.removeChild(element);
return true;
} else {
var normalize = false;
for (var i = element.childNodes.length - 1; i >= 0; i--) {
if (MyApp_RemoveAllHighlightsForElement(element.childNodes[i])) {
normalize = true;
}
}
if (normalize) {
element.normalize();
}
}
}
}
return false;}
function MyApp_RemoveAllHighlights () {
MyApp_SearchResultCount = 0;
MyApp_RemoveAllHighlightsForElement(document.body);
}
function findImage (x, y){
return document.elementFromPoint(x, y).src;
}</script >
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Всем приветЕсть таск для гранта, может кто помочь перевести его в таск для галпа? Чтобы синтаксис был верен
Как красиво расположить и, по возможности, добавлять и редактировать блоки организующей схемы компании с использованием Ajax?
Не могу понять, как получить значение из InputTextПробую разные варианты - меняются ошибки