:: Visual Foxpro, Foxpro for DOS
Re: Запрет возврата на предыдущую страницу в web-контроле
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
И какая принципиальная разница открывалась она по клику на ссылке или по возврату? Мне реально интересно, зачем эти 2 варианта разделять


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Запрет возврата на предыдущую страницу в web-контроле
maple4
Автор

Сообщений: 210
Откуда: Москва
Дата регистрации: 26.10.2007
Ну вот, теперь придется объяснить все.

По ссылке у меня открывается не сама страница (она - всего лишь бланк), а временная, созданная по бланку (такой вот псевдо-ASP/PHP с передачей параметров по POST или адресу).
Следовательно, в историю попадают временные страницы, что мне, естественно, не надо.

Делаю интерфейс программы полностью на Web-контроле.
Такой вариант меня уже не устраивает - forum.foxclub.ru - т.е. когда из страницы открывается FoxPro-форма.
Хочу обойтись (точнее - уже обошелся) ВООБЩЕ без форм FoxPro.
1. Создается набор страниц, оформленных в виде локального сайта.
2. В нужных местах вставляются специальные управляющие теги. Их назначение - в момент открытия сформировать вместо себя некоторый html-текст (из кода FoxPro, полей, переменных, функций).
3. Запускается программа с указанием начальной страницы и получаю Интерфейс, полностью построенный БЕЗ FoxPro-форм.
4. Кликая по ссылкам - перехожу к нужной странице/форме (точнее - к временной странице, созданной на ее основе).

Теперь самое интересное...
Данная проблема возникает ТОЛЬКО в случае расположения страниц интерфейса в разных каталогах (у меня таких - два, это основной каталог-в нем программа запускается и в нем находится стартовая страница, и каталог размещения интерфейса, куда пользователь попадает со стартовой страницы).
Почему? Временные страницы ОДНОГО каталога формируются под ОДНИМ и ТЕМ ЖЕ именем, и в этом случае проблема сама собой прекрасно решается . Первоначально все страницы бланков находилось в одном каталоге, но потом захотелось полной свободы - и вот, на тебе, вылезла проблема...

В моем случае (у меня два каталога) - по Alt-влево, если пользователь нажмет эту комбинацию на элементе, он перейдет не на предыдущую страницу, а на самое начало - что не особенно критично ("это не ошибка, это фича", причем, данная возможность удобна для быстрого перехода от раздела к разделу ).
Ratings: 0 negative/0 positive
Re: Запрет возврата на предыдущую страницу в web-контроле
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
При полном контроле над исходниками страниц IMHO ничего не мешает сделать их все "абсолютно различимыми" - вплоть до того, чтобы даже первый и второй заход на одну и ту-же страницу шёл по разным URL-ам... При том "историю" можно трактовать как угодно гибко, хоть блокировать переход по "старому" URL-у, хоть перегенерировать страницу...


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Запрет возврата на предыдущую страницу в web-контроле
piva

Сообщений: 18655
Откуда: Курган
Дата регистрации: 24.03.2004
Я не знаю что там в контроле за проблемы и че там показывается, но у меня стоит как вкопанное - и никуда не возвращается, никакими средствами, даже пункты контекстного меню - вперед\назад не доступны

Public o
o=CreateObject("form1")
o.show()
Define Class Form1 as Form
Add Object ie as OleControl with OleClass="Shell.Explorer.2", width=300, height=200
Procedure ie.init
With this
.navigate("About:blank")
EndWith
Procedure ie.beforenavigate2(pdisp, url, flags, targetframename, postdata, headers, cancel)
With this
If url="my://next1"
.navigate2("about:blank")
DO While .readystate <> 4
Doevents
Enddo
.document.writeln("Next page 1")
cancel=.t.
EndIf
If url="my://next2"
.navigate2("about:blank")
DO While .readystate <> 4
Doevents
EndDo
.document.writeln("<body>Next page 2</body>")
cancel=.t.
EndIf
EndWith
procedure Init
With this
.resize
.ie.document.write([<FONT SIZE="2" FACE="Arial">])
.ie.document.write("Переходы ")
.ie.document.write("<a href='my://next1'>next 1</a>")
.ie.document.write("<br>")
.ie.document.write("<a href='my://next2'>next 2</a>")
.ie.document.write("</font>")
EndWith
Procedure Resize
With this
.ie.Width=.Width
.ie.height=.Height
EndWith
EndDefine


------------------
Часто бывает так, что есть над чем задуматься, а нечем.
Ratings: 0 negative/0 positive
Re: Запрет возврата на предыдущую страницу в web-контроле
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
А, жульничаешь с навигацией


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Запрет возврата на предыдущую страницу в web-контроле
maple4
Автор

Сообщений: 210
Откуда: Москва
Дата регистрации: 26.10.2007
Мне не надо делать страницы различимыми
У меня временные страницы формируются под одним и тем же именем - следовательно, никакой истории нет (это как раз то, что мне надо!).

НО если временная страница формируется в другом каталоге - история появляется (почему в другом - завязано на картинках, стилях и т.д. ).
Ratings: 0 negative/0 positive
Re: Запрет возврата на предыдущую страницу в web-контроле
piva

Сообщений: 18655
Откуда: Курган
Дата регистрации: 24.03.2004
А че жульничабю, я так понял у него чета самописное для своего html репортера, всяко страницы не лету фигачит, хотя может и не так.

Кстати - CommandStateChange - как раз рулить Enable для CSC_NAVIGATEBACK = 0x2 И не должно никуда возвращаться, хотя не пробовал

Цитата:
Syntax

Private Sub object_CommandStateChange( _
ByVal Command As Long, _
ByVal Enable As Boolean)
Parameters

object
Object expression that resolves to the objects in the Applies To list.
Command
A CommandStateChangeConstants enumeration value that specifies the command that changed.
Enable
A Boolean value that specifies the enabled state.
false
Command is disabled.
true
Command is enabled.



typedef enum CommandStateChangeConstants {
CSC_UPDATECOMMANDS = (int) 0xFFFFFFFF,
CSC_NAVIGATEFORWARD = 0x1,
CSC_NAVIGATEBACK = 0x2
} CommandStateChangeConstants;


------------------
Часто бывает так, что есть над чем задуматься, а нечем.
Ratings: 0 negative/0 positive
Re: Запрет возврата на предыдущую страницу в web-контроле
maple4
Автор

Сообщений: 210
Откуда: Москва
Дата регистрации: 26.10.2007
спасибо, буду смотреть
хотя, слишком сложно...
одна надежда, что не все знают про Alt-влево (или только я не знал? )
Ratings: 0 negative/0 positive
Re: Запрет возврата на предыдущую страницу в web-контроле
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Ну ну, завтра в IE (а значит и в этом контроле) появится какая-нить поддержка "жестов" или голосовое управление, и опять буш бороться с ветряными мельницами


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Запрет возврата на предыдущую страницу в web-контроле
Влад Колосов

Сообщений: 22664
Откуда: Ростов-на-Дону
Дата регистрации: 05.05.2005
Igor Korolyov
Ну ну, завтра в IE (а значит и в этом контроле) появится какая-нить поддержка "жестов" или голосовое управление, и опять буш бороться с ветряными мельницами

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


------------------
Совершенство - это не тогда, когда нельзя
ничего прибавить, а тогда, когда нечего убавить.




Исправлено 1 раз(а). Последнее : Влад Колосов, 27.10.10 18:20
Ratings: 0 negative/0 positive
Re: Запрет возврата на предыдущую страницу в web-контроле
Рома

Сообщений: 1079
Дата регистрации: 06.06.2001
maple4
Мне не надо делать страницы различимыми У меня временные страницы формируются под одним и тем же именем - следовательно, никакой истории нет (это как раз то, что мне надо!).

Ну так если не надо различать - при нажатии на ссылку - просто перезаписывай innerHtml какого-нибудь DOM-эдемента содержимым временного файла(в принципе, тогда и файл не нужен)
Например,
Set Safety Off
Text to lcApp noshow
<html>
<head>
<style type="text/css">
body
{
margin: 0px;
padding: 0px;
}
.menubar
{
margin:0px;
background-color: #dfdfd8;
width:100%;
padding:2px;
}
a.menuitem
{
padding:3px; color:#000099;
text-decoration:none;
}
a.menuitem:hover
{
background-color: #000099;
color: white;
}
.page
{
margin:0px;
padding:10px;
}
</style>
</head>
<body oncontextmenu="return false;" onkeydown="if(event.keyCode==116)event.keyCode=0;">
<script type="text/javascript">
var htmlapp = null; //will be set up in htmlapp.Init()
</script>
<div id="menubar" class="menubar">
<a class="menuitem" onclick="htmlapp.DoForm('Form1.htm')" href="javascript:void(0)">Form1</a>
<a class="menuitem" onclick="htmlapp.DoForm('Form2.htm')" href="javascript:void(0)">Form2</a>
<a class="menuitem" onclick="htmlapp.DoForm('Form3.htm')" href="javascript:void(0)">Form3</a>
<a class="menuitem" onclick="htmlapp.DoForm('Form4.htm')" href="javascript:void(0)">Form4</a>
</div>
<div id="page" class="page">
<h1>Welcome</h1>
</div>
</body>
</html>
EndText
Strtofile(lcApp, "htmlapp.htm")
*****************
htmlapp = Createobject("htmlapp")
htmlapp.Show(1)
******************
Define Class htmlapp As Form
Height = 500
Width = 700
Add Object html As OleControl With OleClass="Shell.Explorer.2"
Procedure html.Init
*Load master page
This.Navigate("file:///"+Fullpath("htmlapp.htm"))
Do While This.ReadyState!=4
DoEvents
Enddo
Endproc
Procedure Init
With This.html
.Move(0,0, This.Width, This.Height)
.Anchor = 15
EndWith
*Set callback object to use it in javascript
This.html.Document.Script.htmlapp = This
EndProc
*Script requests to load another page
Procedure DoForm
Lparameters formName
With This.html.Document
If File(formName)
.getElementByID("page").innerHtml = filetostr(formName)
Else
.getElementByID("page").innerHtml = [<h1 style="color:red">File ']+formName+[' not found</h1>]
EndIf
Endwith
Return .F.
Endproc
Procedure html.Refresh
*** ActiveX Control Method ***
Nodefault
Endproc
Enddefine

Навигации как таковой здесь вообще не происходит - при нажатии на ссылку вызывается метод нашей формы,
а там просто в DIV с именем page пытаемся записать HTML из запрашиваемого файла.

При этом мы все время находимся на начальной странице - истории никак не может получиться



Исправлено 1 раз(а). Последнее : Рома, 27.10.10 19:19
Ratings: 0 negative/0 positive
Re: Запрет возврата на предыдущую страницу в web-контроле
piva

Сообщений: 18655
Откуда: Курган
Дата регистрации: 24.03.2004
Крута , а я и не знал что так можно

This.html.Document.Script.htmlapp = This


------------------
Часто бывает так, что есть над чем задуматься, а нечем.
Ratings: 0 negative/0 positive
Re: Запрет возврата на предыдущую страницу в web-контроле
maple4
Автор

Сообщений: 210
Откуда: Москва
Дата регистрации: 26.10.2007
Ничего себе ... возьму на вооружение
Предлагаю создать раздел по использованию ie-контрола (различные варианты создания, управление, нюансы использования и т.д.).
Если честно, узнал много нового. Стало ОЧЕНЬ интересно, "сколько же я не знаю" .

Возвращаясь к своей проблеме.
Я формирую временный файл в разных каталогах, так как страница будет использовать графику.
Пути к графике в основном относительные, поэтому НЕВОЗМОЖНО использовать один и тот же временный файл - картинки просто не будут отображаться.

Несколько вариантов запрета возврата на предыдущую страницу:
I. Запретить нажатие клавиш.
1) средствами FoxPro
одни и те же клавиши,тем не менее, должны работать при нахождении в разных элементах.
например, Backspace при редактировании текста ДОЛЖЕН работать, и должен удалять предыдущий символ.

2) средствами JavaScript
с Backspace - решено, с Alt-влево - срабатывает при нахождении в элементе.

3) запретить саму возможность срабатывания GoBack
используя DLL, доступ к реестру, код С и т.д.
слишком сложно... увидеть бы рабочий примерчик

II. Поиграться с историей.
1) формировать один временный файл.
если временная страница формируется в одном каталоге и не используется графика - тогда все ок.

2) УДАЛИТЬ историю.
есть ли такая возможность в принципе?



Исправлено 2 раз(а). Последнее : maple4, 28.10.10 10:35
Ratings: 0 negative/0 positive
Re: Запрет возврата на предыдущую страницу в web-контроле
piva

Сообщений: 18655
Откуда: Курган
Дата регистрации: 24.03.2004
Хе - получилось отключить заполнение хистори, тока как всегда через задницу


Procedure ie.beforenavigate2(pdisp, url, flags, targetframename, postdata, headers, cancel)
With this
flags=2+8
cancel=.t.
.navigate(url, flags, targetframename, postdata, headers)
EndWith

В целом это было так


Text to lcStr Noshow TEXTMERGE
<html><body>
Page 1
<a href="<<FullPath(".")>>\page2.htm"> Next </a>
</body></html>
EndText
StrToFile(lcStr,"page1.htm")
Text to lcStr Noshow TEXTMERGE
<html><body>
Page 2
<a href="<<FullPath(".")>>\page3.htm"> Next </a>
EndText
StrToFile(lcStr,"page2.htm")
Text to lcStr Noshow TEXTMERGE
<html><body>
Page 3 - Last
</body></html>
EndText
StrToFile(lcStr,"page3.htm")
Public o
o=CreateObject("form1")
o.show()
Define Class Form1 as Form
Add Object ie as OleControl with OleClass="Shell.Explorer.2", width=300, height=200
Procedure ie.init
With this
.navigate2(FullPath("page1.htm"))
EndWith
Procedure ie.beforenavigate2(pdisp, url, flags, targetframename, postdata, headers, cancel)
With this
flags=2+8
cancel=.t.
.navigate(url, flags, targetframename, postdata, headers)
EndWith
procedure Init
With this
.resize
EndWith
Procedure Resize
With this
.ie.Width=.Width
.ie.height=.Height
EndWith
EndDefine


------------------
Часто бывает так, что есть над чем задуматься, а нечем.
Ratings: 0 negative/0 positive
Re: Запрет возврата на предыдущую страницу в web-контроле
maple4
Автор

Сообщений: 210
Откуда: Москва
Дата регистрации: 26.10.2007
piva
Procedure ie.beforenavigate2(pdisp, url, flags, targetframename, postdata, headers, cancel)
With this
flags=2+8
cancel=.t.
.navigate(url, flags, targetframename, postdata, headers)
EndWith

РАБОТАЕТ! - возврат не работает

Большущее спасибо!
Ratings: 0 negative/0 positive
Re: Запрет возврата на предыдущую страницу в web-контроле
piva

Сообщений: 18655
Откуда: Курган
Дата регистрации: 24.03.2004
Правильнее будет ваще-то так, а то там получается рекурсия, хотя и продавливается как-то самим браузером

Procedure ie.beforenavigate2(pdisp, url, flags, targetframename, postdata, headers, cancel)
With this
If thisform.tag <> url
cancel=.t.
thisform.tag=url
** Надо 2 раза, а то ловить рекурсию не хотелось
.navigate("about:blank",10)
.navigate(url, 10, targetframename, postdata, headers)
EndIf
EndWith


------------------
Часто бывает так, что есть над чем задуматься, а нечем.
Ratings: 0 negative/0 positive
Re: Запрет возврата на предыдущую страницу в web-контроле
Рома

Сообщений: 1079
Дата регистрации: 06.06.2001
piva
а я и не знал что так можно

Ничего хитрого, в принципе, нет - просто пользуемся тем, что при передаче VFP-объекта в COM-среду фокс создает для него IDispatch обертку,
а дальше работает позднее связывание.
Точно так же работает и в обратную сторону - фокс спокойно может использовать объекты, созданные в коде страницы с помощью javascript.
Ratings: 0 negative/0 positive
Re: Запрет возврата на предыдущую страницу в web-контроле
maple4
Автор

Сообщений: 210
Откуда: Москва
Дата регистрации: 26.10.2007
Цитата:
ничего хитрого
ага, а у меня мировоззрение поменялось

Цитата:
Точно так же работает и в обратную сторону - фокс спокойно может использовать объекты, созданные в коде страницы с помощью javascript.

А можно небольшой примерчик?



Исправлено 1 раз(а). Последнее : maple4, 28.10.10 17:18
Ratings: 0 negative/0 positive
Re: Запрет возврата на предыдущую страницу в web-контроле
Рома

Сообщений: 1079
Дата регистрации: 06.06.2001
maple4
А можно небольшой примерчик?


Совершенно бесполезный пример

На странице имеем
<script type="text/javascript">
function getJSObject()
{
return {
hello : "Hello, I'm JS object",
num : 543534.33,
bool : true
};
}
</script>

В VFP - вызываем это дело и обращаемся к свойствам объекта, полученного из js-функции
Local jsObj
jsObj = thisform.WebBrowser.Document.Script.Eval("getJSObject()")
MessageBox( ;
jsobj.hello + Chr(13)+ ;
str(jsobj.num, 10, 2) + Chr(13)+ ;
Transform(jsobj.bool) )
Ratings: 0 negative/0 positive
Re: Запрет возврата на предыдущую страницу в web-контроле
maple4
Автор

Сообщений: 210
Откуда: Москва
Дата регистрации: 26.10.2007
спасибо!
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 15 Rifat PaulWist Guest (Гостей: 12)

© 2000-2024 Fox Club 
Яндекс.Метрика