2010-10-10 1 views
0

Я пишу JavaScript для открытого исходного кода браузера доступен для Android в заменитьтекст в теге тела из страницы, загруженные в браузер с некоторым текстом.JavaScript для замены текста в теге тела страницы, загруженной в исходном браузер открытого для Android

Это должно быть обработано в том случае, если после загрузки страницы в браузер этот код выполняет &. Замены происходят & Наконец, страница с замененным текстом отображается в браузере.

Это замена часть кода:

var textnodes, node, i; 
textnodes = document.evaluate("//body//text()[not(ancestor::script) and not(ancestor::style)]",document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null); 
replace(); 
function replace() { 
    for (i = 0; i < textnodes.snapshotLength; i++) { 
     node = textnodes.snapshotItem(i); 
     text = node.data; 
     text = text.replace(/\'/g, "♥"); 
     //The rest of the replacements 
     node.data = text; 
    } 
} 

Однако document.evaluate, кажется, не работает. Может ли кто-нибудь помочь мне исправить этот код или какие-либо предложения сделать это, заменив задачу текстового текста любым другим способом?

Спасибо!

ответ

0

Извините, вы don't get DOM Level 3 XPath in the Android browser.

Хотя вы можете использовать реализацию JavaScript XPath (eg), это будет медленное и громоздкое решение по сравнению с написанием определенного кода обхода DOM.

function replaceInTextNodes(parent, needle, replacement) { 
    for (var child= parent.firstChild; child!==null; child= child.nextSibling) { 
     if (child.nodeType===1) { # Node.ELEMENT_NODE 
      var tag= child.tagName.toLowerCase(); 
      if (tag!=='script' && tag!=='style' && tag!=='textarea') 
       replaceInTextNodes(child, needle, replacement); 
     } 
     else if (child.nodeType===3) 
      child.data= child.data.replace(needle, replacement); 
    } 
} 
replaceInTextNodes(document.body, /'/g, '\u2665'); 
+0

Большое спасибо! Я могу решить эту проблему с вашей помощью. В настоящее время я выполняю JavaScript на event.equals (EventConstants.EVT_WEB_ON_PAGE_FINISHED - поэтому в случае больших страниц потребуется много времени для замены, так как ему нужно подождать, пока загрузится полная страница. лучше, чтобы выполнить этот скрипт таким образом, чтобы замены выполнялись, как только страница была видна (до того, как вся страница загрузится). Цените свою помощь! – Dhanika

+0

Вам, наверное, придется следить за интервальным таймером. быть реальной болью, чтобы попытаться отслеживать, какие элементы на странице были полностью загружены, чтобы избежать повторной замены по тем же самым текстовым узлам в два раза. К счастью, в этом случае повторная замена безвредна, поэтому вы можете уйти с запуском замены несколько раз. – bobince

+0

Спасибо, я положил его на интервал времени, длинный интервал, когда страница загружена, и короткий интервал, пока страница загружается. Теперь это работает отлично. Текст уже заменен, когда они видны. для вашей помощи! – Dhanika