Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.11.2017, 16:44
Новичок на форуме
Отправить личное сообщение для AlStorm Посмотреть профиль Найти все сообщения от AlStorm
 
Регистрация: 23.11.2017
Сообщений: 3

Подмена js на странице до запуска скрипта
Всем привет! Может быть нубский вопрос, но...

В общем, есть сайт. На его странице подгружается внешний js, где есть интересная мне процедура. Допустим, такая:

function(locale) {
        var localeSplit = locale.split(":");
        language = localeSplit.length > 1 ? localeSplit[1] : 'English';
        var key = "runtime:" + language
        if (language != "English" && language) {
            translationService.getTranslationData(locale).success(function(translations) {
                if (localStorage.getItem(key)) {
                    var json = JSON.parse(localStorage.getItem(key))
                    translations = _.extend(translations, json)
                }
                localStorage.setItem(key, JSON.stringify(translations))
                gettextCatalog.setStrings(language, translations);
                gettextCatalog.setCurrentLanguage(language);
            })
        }
    }


Все, что мне нужно, это в переменную locale вписать значение "en-GB:Russian" в начале функции. Сделать так, чтобы скрипт отработал уже после моего изменения. Как мне это сделать? В дебаггере проверил - все работает, но как изменить функцию на постоянной основе? Может быть, с помощью расширения или ..?
Ответить с цитированием
  #2 (permalink)  
Старый 23.11.2017, 18:22
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Перед скриптом:

var _originSplit = ''.split;
String.prototype.split = Array.bind(null, 'en-GB', 'Russian');


После скрипта:
String.prototype.split = _originSplit;
_originSplit = null;



Но если где-то внутри используется split, то может всё сломаться.

Последний раз редактировалось ruslan_mart, 23.11.2017 в 18:24.
Ответить с цитированием
  #3 (permalink)  
Старый 23.11.2017, 22:53
Новичок на форуме
Отправить личное сообщение для AlStorm Посмотреть профиль Найти все сообщения от AlStorm
 
Регистрация: 23.11.2017
Сообщений: 3

Сообщение от ruslan_mart Посмотреть сообщение
Перед скриптом:

var _originSplit = ''.split;
String.prototype.split = Array.bind(null, 'en-GB', 'Russian');


После скрипта:
String.prototype.split = _originSplit;
_originSplit = null;



Но если где-то внутри используется split, то может всё сломаться.
Наверное, не так объяснил... Сайт - не мой. Внести изменения в его код напрямую не могу. Но хочу. Вопрос: как внести изменения в этот код на стороне клиента? С помощью плагина, расширения браузера или еще как.
Ответить с цитированием
  #4 (permalink)  
Старый 23.11.2017, 23:36
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,138

Google =)
Ответить с цитированием
  #5 (permalink)  
Старый 24.11.2017, 10:32
Новичок на форуме
Отправить личное сообщение для AlStorm Посмотреть профиль Найти все сообщения от AlStorm
 
Регистрация: 23.11.2017
Сообщений: 3

Сообщение от MallSerg Посмотреть сообщение
Google =)
А userscript точно можно запустить ДО запуска встроенного скрипта на странице?
Ответить с цитированием
  #6 (permalink)  
Старый 24.11.2017, 10:51
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,138

Google ...

Стихотворение
Ответить с цитированием
  #7 (permalink)  
Старый 24.11.2017, 16:59
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

Примерно так:
// ==UserScript==
// @name        Replace locale
// @include     http*!**/!*://site.com/*
// @grant       none
// @run-at      document-start
// ==/UserScript==
if(typeof unsafeWindow === 'undefined') unsafeWindow = window;
unsafeWindow.String.prototype.split = function(split){
  return function(separator){
    if(separator === ':' && this === 'English'){ //если разделитель ":" и строка нужная нам 
      unsafeWindow.String.prototype.split = split; // возвращаем на место стандартный метод
      return ['en-GB', 'Russian']; // отдаём нужные значения
    }
    return split.apply(this, arguments); // иначе отдаём результат стандартного метода
  }
}(unsafeWindow.String.prototype.split)
__________________
29375, 35

Последний раз редактировалось Aetae, 24.11.2017 в 17:03.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
42 одинаковых скрипта c различными парам-ми на одной странице dimas15 Общие вопросы Javascript 2 10.03.2016 16:23
Блок переключения меню на JS, два скрипта в одном файле Dizeloid Элементы интерфейса 0 30.07.2009 12:03
js поиска на странице ovetskiy Я не знаю javascript 2 10.06.2009 10:12
JS меню работает на обычной html странице, а на юкозовском движке нет. adware Я не знаю javascript 10 16.05.2009 16:48
подключение стороннего js скрипта friend Общие вопросы Javascript 2 24.05.2008 19:51