[SOLVED] Get URL for router from browser

Hello!
I have a WEB application in the browser, and use Component Pages and Ajax requests.
I need to share a link to a dynamically generated page.
How can i do this?

in the code i can use link:

<a href="/page-loader-component/vladimir/123/about-me/1/?start=0&end=30#top"></a>

but how i’ll get URL for router from browser url string?

in option - pushState: true

I mean, can I control the application from the browser line?

Yes you can, by enabling pushState or you can try manually check document.location.href to see URL

1 Like

I test application (kitchen-sink) in directory /MYDIR.
In routes.js i used relative URL:

  {
    path: '/about/',
    url: 'pages/about.html',
    name: 'about',
  }

i try this code

  view: {      
    pushState: true,
    pushStateRoot: '/MYDIR',
    pushStateSeparator: '',  
  },

I click in application “about page” - in browser URL string i see: https://mydomain.ru/MYDIR/about/
but when i open new tab, and tape in browser string “https://mydomain.ru/MYDIR/about/”, i get error 404.

You also need to configure server to handle it correctly

Server? How can i do this?

I can parse the url and send a request with parameters to the desired page, but it seems that framework7 already has this function, I want to understand it

i’m found:

was edit .htaccess

RewriteEngine On
RewriteRule ^.*$ index.html [NC,L]

no wanted effect(
Always open only main page index.html, and routing does not work

I try absolut path in routes:

  {
    path: '/about/',
    url: 'https://mydomain.ru/MYDIR/pages/about.html',
    name: 'about',
  }

nothing

many attempts and all to no avail

when i click “Component Page”, console log is

0:11413 Uncaught (in promise) TypeError: Cannot read property '2' of null

i need help

Покажите код на jsfiddle

Приветствую, код чего конкретно?
В данном случае это код kitchen-sink из дистрибутива положенный в папку DIRNAME.
Изменил только пути в routes.js на абсолютные, по рекомендации с форума, и в app.js включил pushState, указав root соответственно.

Мне нужно, чтобы скопированный url открывал то же состояние в другой вкладке, т.е. чтобы можно было поделиться ссылкой на страницу, в идеале с get параметрами, т.к. у меня веб-приложение, клиент работает из браузера.

Настроил в .htaccess редирект всех url на index.html, как сказал Владимир. URL изменяется, но страница нет. Всегда main. Может нужно с View поиграть?

По идее мне просто нужно взять URL и обработать его так же как и обычную сслыку в коде - по правилам routes.js. Как это сделать?

Работаю с F7 уже давно, раньше не было такой необходимости. Сделан не один проект, но тут завис…

Вижу, по постам, Вы хорошо разбираетесь в вопросе, подскажите пожалуйста

У вас одно view или несколько?

одно - по умолчанию, как в примере

мне кажется что-то ещё связано с кэшем…

Когда я включаю редирект, начинают работать ссылки, кроме компонентных страниц.
Очищаю кэш браузера (Chromium), перестают работать все. Странно…

Пробую:

  xhrCache: false,
  cacheDuration: 0,
  cache: false

Вообще не работает ничего сразу.

pushState работает с path, а не с url:

https://mydomain.ru/MYDIR/about/ вот так будет работать а так https://mydomain.ru/MYDIR/pages/about.html не будет

Это понятно, pushState отвечает за отображение пути в строке URL, это работает без проблем,
но как мне заставить роутер обрабатывать этот путь также, как будто это href=" /about/", при вводе его в строке браузера и нажатии Enter.

url https://mydomain.ru/MYDIR/pages/about.html у меня прописан в роутинге и должен просто сопоставляться пути из url.

Нужно использовать параметры в url, пример из документации:
{
path: ‘/users/:userId/posts/:postId’,
url: ‘http://myapp.com/posts/{{userId}}/{{postId}}’
}
Так можно получить сопоставление path => url. Для парсинга используется это: https://github.com/pillarjs/path-to-regexp

Где то что то не правильно настроено, всё должно работать без проблем “из коробки”. Есть живой пример?

Автор топика хочет другое, он хочет чтобы path трансформировался в url автоматически, насколько я понял из постов.

С get параметрами мне все понятно, с путями и URL тоже.

Вопрос простой - пишу в браузере mydomain.ru/MYDIR/about, жму enter и хочу попасть на about.html в папке pages. как будто я просто нажал на линк /about/

прописал абсолютные пути в роутере, сделал редирект на index.html, включил pushState и указал root директорию

Я понял что Вы имели ввиду. При редиректе на index я просто активирую обработку маршрутов от корня, но запускать роутер нужно самостоятельно, app.router, указав параметры запуска. Так?

где торможу, не могу понять?

Мне кажется я должен сам ловить url (в данном случае путь из строки браузера document.location.href), и дальше вызывать роутер с параметрами, т.к. автоматически это не делается, правильно?

app.view.main.router.navigate(app.views.main.router.currentRoute.path) - решил бы вопрос, но после того, как происходит редирект на index.html теряется начальный URL

а зачем мне использовать стороннюю библиотеку для парсинга, если F7 делает это сам по ссылке /users/:user/:userId/:posts/:postId/? Я думаю, что могу отправить этот путь роутеру и он сам выдаст результат.