Не воспринимается кириллица.
Добрый день. Помогите,пожалуйста, советом. Пишу расширение для хрома, которое бы заменяло слова на сайтах на те, которые прописаны у меня в файле.
В файле dictionaries содержатся слова: 1 колонка - что заменить, 2 колонка -на что заменить. Пример: var dictionary={ "replacements": { "TEX1" : "arb", "Opera" : "Не опера", "Маша" : "Мария" и т.д. Так вот, с нахождением англ слов и заменой на англ - расширение справляется. С нахождением англ слов и заменой на ру - тоже. Но "Маша" : "Мария" он заменять отказывается, как и другие слова "ру на ру". Привожу пример кода background.HTML <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <!-- Тег meta для указания кодировки --> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <head> <title>Background Page</title> <script src="dictionaries/original.js"></script> <script src="background.js"></script> </head> <body> </body> </html> ___ dictionaries/original.js - тут лежат слова для замены с заменой. __ файл background.js" показан ниже: (function() { var ONE_DAY = 1000 * 60 * 60 * 24; var KEY_LAST_CHANGED_AT = 'lastChangedAt'; var KEY_OPTIONS = 'options'; var KEY_PAUSED = 'paused'; var _alreadyQueued = false; function now() { return new Date().getTime(); } function checkForRandomSwap() { var lastChangedAt, pollTimeout; var options = JSON.parse(localStorage.getItem(KEY_OPTIONS)); if(options && options.checkDaily) { lastChangedAt = parseInt(localStorage.getItem(KEY_LAST_CHANGED_AT), 10); //не вносились изменения if(isNaN(lastChangedAt) || lastChangedAt + ONE_DAY < now()) { var pause = Math.random() > 0.5; // Flip a coin! lastChangedAt = setPaused(pause); } // Set up the next check. if(!_alreadyQueued) { pollTimeout = (lastChangedAt + ONE_DAY) - now(); setTimeout(function() { _alreadyQueued = false; checkForRandomSwap(); }, pollTimeout); _alreadyQueued = true; } } } function updateBadge(paused) { var badgeText = paused ? "OFF" : ""; chrome.browserAction.setBadgeText( { text: badgeText } ); } function isPaused() { return (localStorage.getItem(KEY_PAUSED) == 'true'); } function setPaused(paused) { var lastChangedAt = now(); localStorage.setItem(KEY_PAUSED, paused); chrome.storage.sync.set( { 'paused': paused } ); updateBadge(paused); localStorage.setItem(KEY_LAST_CHANGED_AT, lastChangedAt); return lastChangedAt; } function togglePause(tab) { setPaused(!isPaused()); // Reload the current tab. chrome.tabs.update(tab.id, {url: tab.url}); } function getExcluded() { var opts = JSON.parse(localStorage.getItem(KEY_OPTIONS)); return opts ? opts['excluded'] : []; } function onMessage(request, sender, sendResponse) { var requestId = request.id; if(requestId == 'isPaused?') { // TODO: Convert to boolean. sendResponse({value: isPaused()}); } else if(requestId == 'getExcluded') { sendResponse({value: getExcluded()}); } else if(requestId == 'setOptions') { localStorage.setItem(KEY_OPTIONS, request.options); } else if(requestId == 'getDictionary') { sendResponse(dictionary); } } chrome.browserAction.onClicked.addListener(togglePause); chrome.extension.onRequest.addListener(onMessage); updateBadge(isPaused()); checkForRandomSwap(); })(); |
Вопрос в следующем: что нужно прописать дополнительно, чтобы "ру на ру" так же менялось?
|
Цитата:
|
function() { var _self = this; var _dictionary; function getDictionary(callback) { chrome.extension.sendRequest({id: "getDictionary"}, function(response) { _dictionary = response; // Store the dictionary for later use аа callback.apply(_self, arguments); }); } function handleText(textNode) { var replacements = _dictionary.replacements; var expressions = _dictionary.expressions; var v = textNode.nodeValue; var matchFound = false; var regex, original; //text replacements for(original in replacements) { original_escaped = original; regex_for_question_mark = /\?/g regex_for_period = /\./g original_escaped = original_escaped.replace(regex_for_question_mark, "\\?"); original_escaped = original_escaped.replace(regex_for_period, "\\."); regex = new RegExp('\\b' + original_escaped + '\\b', "gi"); if (v.match(regex)) { v = v.replace(regex, replacements[original]); matchFound = true; } } // regex replacements for(original in expressions) { regex = new RegExp(original, "g"); if (v.match(regex)) { v = v.replace(regex, expressions[original]); matchFound = true; } } // Меняем только в случае изменения текста if (matchFound) { textNode.nodeValue = v; } } function walk(node) { // не удалять. связан с осн узлом var child, next; switch(node.nodeType) { case 1: // Element case 9: // Document case 11: // Document fragment child = node.firstChild; while(child) { next = child.nextSibling; walk(child); child = next; } break; case 3: // Text handleText(node); break; } } var running = true; function work() { running = true; walk(document.body); running = false; } chrome.extension.sendRequest({id: 'isPaused?'}, function(response) { var isPaused = response.value; if(isPaused) { return; } chrome.extension.sendRequest({id: 'getExcluded'}, function (r2) { var ex = r2.value; for (x in ex) { if (window.location.href.indexOf(ex[x]) != -1) { return; } } getDictionary(function() { work(); }); }); }); var timeout = null; document.addEventListener('DOMSubtreeModified', function(){ if (running) { return; } if (timeout) { clearTimeout(timeout); } timeout = setTimeout(work, 500); }, false); })(); |
Цитата:
new RegExp('(^|\\s)' + original_escaped + '($|\\s)') |
MashaDo,
Пожалуйста, отформатируйте свой код! Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [html run] ... минимальный код страницы с вашей проблемой [/html] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
не работает так( хром делает RegExp('(^|\\s)' + original_escaped + '($|\\s)')
как ошибку синтаксиса. Замена слов не происходит. |
спасибо, что сказали)не знала о такой возможности.
|
MashaDo,
regex = new RegExp('(^|\\s)' + original_escaped + '($|\\s)', 'gi'); |
так тоже не работает..
|
Часовой пояс GMT +3, время: 22:13. |