1. Nish Ag
  2. PowerBuilder
  3. Wednesday, 2 November 2022 05:26 AM UTC

I am trying to implement a webbrowser control and inside the webbrowser control I am trying to implement a way to collect value from the input field.

 

This is a test webpage I have setted up: https://stc.opensyscon.com.au/test.html

 

The code of the webpage is this:

<script type="text/javascript" src="https://code.jquery.com/jquery-3.6.1.min.js"></script>


<script>
function getIdValue(lid)
{
    var lret;

    lret = document.getElementById(lid).value;

    return lret;
}
/*
$(document).ready(function()
{
    var lret;

    lret = getIdValue('fname');
    alert("Lret = " + lret);

});
*/
</script>
<html>
    <head>
        <title>Testing</title>
    <head>

    <body onload="autofill()">
        Test page
        <!--<button id="my_button" onclick="msg_box()">msg box</button>-->
        <form>
            <label for="fname">First name:</label><br>
            <input type="text" id="fname" name="fname"><br>
        </form>
        <script type"text/css">
            function msg_box()
            {
                alert("I am an alert box!");
            }
            function autofill()
            {
                document.getElementById('fname').value="John"
            }
        </script>
    </body>


</html>

 

And in powerbuilder (built on top of the demo code) here is a sample code:

 

Inside w_customers, ue_nav() event (this is being called as post event):

string lsret, ls_tagname
string webpage = "https://stc.opensyscon.com.au/test.html"
//wb_test.Navigate(webpage)

long ll_RootObject
long ll_item
JsonParser lnv_JsonParser
lnv_JsonParser = Create JsonParser

// Script to start navigation:
ib_navigate_called = FALSE
ib_navigate_started = FALSE

lsret = "start"

if wb_test.navigate(webpage) <> 1 then
    // give error message
    return
end if

yield()



//sleep(2)
do while  lsRet <> "complete"
	wb_test.EvaluateJavaScriptSync("document.readyState", REF lsRet)
	
	lnv_JsonParser.LoadString(lsRet)
	ll_RootObject = lnv_JsonParser.GetRootItem()
	ll_item = lnv_JsonParser.GetChildItem(ll_RootObject, 2)
	ls_tagName = lnv_JsonParser.GetItemString(ll_item)

	if Pos(ls_tagName, '"complete"') = 0 then
		 exit
	end if
loop

ib_navigate_called = TRUE

string ls_Json, ls_error
//int result
//
//wb_test.EvaluateJavascriptSync('document.getElementById("my_button")', ls_Json, ls_error)

//wb_test.EvaluateJavascriptSync('document.getElementById("fname").value', ls_Json, ls_error)
wb_test.EvaluateJavascriptSync('getIdValue("fname")', ls_Json, ls_error)


messagebox("Debug", "ls_Json = " + ls_Json)
//wb.test.document.getElementById(lid).value;

//
//
//if 1 = 2 then
//	wb_test.Navigate(webpage)
//end if
//

 

Inside the webborwser control I have got two events:

 

navigationstart():

// We need to know it has really started navigating before we try to determine whether it has finished
if ib_navigate_called then ib_navigate_started = TRUE

 

navigationprogressindex():

// Navigation has been started. If it indicates 100 percent finished, check the document.readyState.
// If that is "complete", print the PDF file.

string lsRet
string webpage = "https://stc.opensyscon.com.au/test.html"

if NOT ib_navigate_started then return

if progressindex < 100 then return

EvaluateJavaScriptSync("document.readyState", REF lsRet)
if Pos(lsRet, '"complete"') = 0 then
    return
end if
ib_navigate_started = FALSE // prevent recursion & thus doing any following steps twice

// now do whatever you need to do, it should be fully loaded!

string ls_Json, ls_error
int result

//wb_test.EvaluateJavascriptSync('document.getElementById("my_button")', ls_Json, ls_error)
//wb_test.EvaluateJavascriptSync('document.getIdValue("fname")', ls_Json, ls_error)
//
//
//if 1 = 2 then
//	wb_test.Navigate(webpage)
//end if

 

Unfortunately the navigationprogressindex() event never gets called so I don't know what is up with that.

 

And in the ue_nav() event, I am getting value from ls_json only if I run through the debugger however running without the debugger it returns nothing.

 

I am trying to follow this guide:

 

https://community.appeon.com/index.php/qna/q-a/new-webbrowser-event-to-know-navigate-is-finished#reply-33504

 

However I don't know how to get navigationprogressindex() to work or if there is an alternative way to get the value of the input field into ls_json?



There are no replies made for this question yet.
However, you are not allowed to reply to this question.
We use cookies which are necessary for the proper functioning of our websites. We also use cookies to analyze our traffic, improve your experience and provide social media features. If you continue to use this site, you consent to our use of cookies.