Ember — изменить текущий маршрут из консоли браузера

Я вовсе не разработчик Ember, но я хотел бы изменить текущий маршрут из консоли браузера. Возможно ли вообще правильно получить доступ к Ember, например. Ember.Router.prototype.transitionTo('/feed')?

Версия сайта 3.16.9.


person crotoan    schedule 03.08.2020    source источник
comment
вы можете использовать ember-inspector, чтобы получить доступ к службе маршрутизатора   -  person Lux    schedule 03.08.2020
comment
Вы пытались запустить событие popstate с вашим целевым маршрутом?   -  person jelhan    schedule 05.08.2020
comment
Я делал это для Linkedin, и кажется, что он не слушает pushState/replaceState. Я буду публиковать решения, которые я нашел   -  person crotoan    schedule 07.08.2020


Ответы (1)


После долгих исследований я обнаружил возможные решения, которые вы можете использовать. Я пытался добиться этого на веб-сайте Linkedin через расширение Chrome.

function runEmbedded(path) {
  const namespaces = window.Ember.Namespace.NAMESPACES;
  let application;
  namespaces.forEach(function (namespace) {
    if (namespace instanceof window.Ember.Application) {
      application = namespace;
      return false;
    }
  });
  application.__container__.lookup('router:main').transitionTo(path);
}

const payload = '/some/new-path'
script.text = `(${runEmbedded.toString()})('${payload}');`;
document.documentElement.appendChild(script);

Второе решение/хак:

Другой возможный хак, который можно использовать, когда веб-сайт не прослушивает действия pushState/replaceState из History API, — это отправить состояние 2 раза, а затем вернуться. Пожалуйста, помните, что это всего лишь взлом.

history.pushState({}, '', msg.payload);
history.pushState({}, '', msg.payload);
history.back();
person crotoan    schedule 07.08.2020