1

Тема: AHK: Как определить возможность перейти назад chrome.ahk

Добрый день.
Собственно, сабж. Возможно ли как то определить - возможно ли сделать переход на страницу назад?
Нашел, что переход назад можно сделать с помощью {XButton1}, но вот как определить саму возможность?

2

Re: AHK: Как определить возможность перейти назад chrome.ahk

Если не использовать библиотеки - можно через поиск картинки / пикселя определить.

Win11x64, AHK v1.1.37.01 (Unicode 64-bit), AHK v2.0.17| AHK-Wiki | Переменные и выражения | RegEx101

3

Re: AHK: Как определить возможность перейти назад chrome.ahk

__Михаил__
Через поиск картинки пробовал, оно почему то работает раз-через-три, хотя я картинки пробовал сравнивать, все 1 в 1 (прога по сравнению прогнала попиксельно).
Библиотека chrome.ahk на раз подключу, без проблем (упомянул в теме).

4

Re: AHK: Как определить возможность перейти назад chrome.ahk

iaccessible.

5

Re: AHK: Как определить возможность перейти назад chrome.ahk

Думаю, вот это.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: AHK: Как определить возможность перейти назад chrome.ahk

Ещё через Javascript:

window.history.length
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7 (изменено: Gh0sTG0, 2021-10-31 18:27:36)

Re: AHK: Как определить возможность перейти назад chrome.ahk

teadrinker Примерно понял, но можно пример куда это отправлять?
Типа так?:

PageInst := Chrome.GetPage(1)
history := PageInst.getNavigationHistory().Value

Или как то по другому? Сейчас нету возможности проверить

window.history.length

А вот эта штука по идее должна сработать, хм... И дальше через количество.
Спасибо.

8

Re: AHK: Как определить возможность перейти назад chrome.ahk

Проще второй способ.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9

Re: AHK: Как определить возможность перейти назад chrome.ahk

Через джаваскрипт точно не то, так как он не возвратит состояние кнопки назад.

10

Re: AHK: Как определить возможность перейти назад chrome.ahk

А зачем состояние кнопки?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

11

Re: AHK: Как определить возможность перейти назад chrome.ahk

Malcev Проверил, да. Действительно, оно возвращает видимо размер полной цепочки, и "слева" и "справа". Осталось понять как из ахк отправлять ту первую штуку.

12

Re: AHK: Как определить возможность перейти назад chrome.ahk

teadrinker пишет:

А зачем состояние кнопки?

Gh0sTG0 пишет:

Возможно ли как то определить - возможно ли сделать переход на страницу назад?

13 (изменено: Gh0sTG0, 2021-10-31 18:32:25)

Re: AHK: Как определить возможность перейти назад chrome.ahk

teadrinker

Цикл:
	Если возможно перейти назад:
			перейти.
	Иначе:
			выйти из цикла.

14

Re: AHK: Как определить возможность перейти назад chrome.ahk

А, да, js всё время возвращает всё количество.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

15 (изменено: teadrinker, 2021-10-31 18:48:24)

Re: AHK: Как определить возможность перейти назад chrome.ahk

По идее так, не проверял:

obj := PageInst.Call("Page.getNavigationHistory", {})
MsgBox, % obj.currentIndex
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

16

Re: AHK: Как определить возможность перейти назад chrome.ahk

teadrinker
Ага, сяп. Попробую как смогу.

17

Re: AHK: Как определить возможность перейти назад chrome.ahk

Подредактировал.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

18

Re: AHK: Как определить возможность перейти назад chrome.ahk

Если переключаться по вкладкам, то исходный код хрома придется редактировать.
ИМХО если chrome.ahk нужен только для этой цели, то через iaccessible проще и надежней.

19

Re: AHK: Как определить возможность перейти назад chrome.ahk

Если только для этой цели, то да.

Malcev пишет:

Если переключаться по вкладкам, то исходный код хрома придется редактировать.

Этого не понял.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

20 (изменено: Malcev, 2021-10-31 23:57:02)

Re: AHK: Как определить возможность перейти назад chrome.ahk

При переключении вкладки нам надо к ней подключаться.
Если мы используем GetPage(), то подключаемся только к type=page.

GetPage(Index:=1, Type:="page", fnCallback:="")
{
   return this.GetPageBy("type", Type, "exact", Index, fnCallback)
}

А вкладки могут быть разных типов, к тому же типы iframe не возвращают нужное значение.
Поэтому, я добавил такую функцию:

GetPage1(Index:=1, Type:="iframe", fnCallback:="")
{
   return this.GetPageBy("type", Type, "not", Index, fnCallback)
}

И добавил условие в эту функцию:

   GetPageBy(Key, Value, MatchMode:="exact", Index:=1, fnCallback:="")
   {
      Count := 0
      for n, PageData in this.GetPageList()
      {
         if (((MatchMode = "exact" && PageData[Key] = Value) ; Case insensitive
            || (MatchMode = "not" && PageData[Key] != Value)
            || (MatchMode = "contains" && InStr(PageData[Key], Value))
            || (MatchMode = "startswith" && InStr(PageData[Key], Value) == 1)
            || (MatchMode = "regex" && PageData[Key] ~= Value))
            && ++Count == Index)
            return new this.Page(PageData.webSocketDebuggerUrl, fnCallback)
      }
   }

Тестировал на опере, вроде работает.

21

Re: AHK: Как определить возможность перейти назад chrome.ahk

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

Malcev пишет:

Если мы используем GetPage(), то подключаемся только к type=page.

Я давно не пользовался, но там же можно тип указать?
Но если нужны дополнительные условия, то поменять код, конечно, не проблема. Я его дополнял наверно каждый раз, когда использовал для реальных проектов.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

22

Re: AHK: Как определить возможность перейти назад chrome.ahk

Тип можно, но на сходство.
Можно конечно с регуляркой помудрить, но имхо легче добавить новый метод несовпадения.

23

Re: AHK: Как определить возможность перейти назад chrome.ahk

teadrinker пишет:

По идее так, не проверял:

obj := PageInst.Call("Page.getNavigationHistory", {})
MsgBox, % obj.currentIndex

Нужно еще потестировать, но на данный момент оно работает. Спасибо.