B4J Question [ABMaterial]NavigateToPageNewTab : Effects on the source page.[SOLVED]

Philip Chatzigeorgiadis

Active Member
Licensed User
Longtime User
Please see the attached video pertaining to the description below.
I have an ABMPage, in which the user navigates on a tree-like table, and then makes a selection from another table on a ModalSheet.
Then the ModalSheet is closed and the NavigateToPageNewTab is called succesfully.
However, the source page (i.e. the page in which the call to NavigatetoPageNewTab is made) is reset and all user's selection up to that point is lost.
(In the Log list, the log data of the websocket_connected of the target page (which opens in the new tab), appear, followed by the log data of Line 25 (see below) of the websocket_connected of the source page.

Is there a way to maintain the user's selection in the source page up to that point, i.e. the changes made to the tree-like table (not the Modal Sheet).



This is where the call to NavigateToPageNewTab is made:
Call to NavigateToPageNewTab:
Sub OpenArticlesModal(row As Int, col As Int)
'    Log(row)
'    Log(col)
    Dim myModal As ABMModalSheet = page.ModalSheet("ArticlesModal")
    Dim tblArtList As ABMTable = myModal.content.Component("tblArtList")  
    If col = 3 Then ' view article button was clicked
        Dim ActiveArticle As Long= tblArtList.GetString(row,0)
        page.CloseModalSheet("ArticlesModal")
        ABMShared.NavigateToPageNewTab(ws, ABMPageId, "../Article/?prmtr="& ActiveArticle, True)
    End If
End Sub

This is the main part of the Web_Socket_connected of the source page

B4X:
Private Sub WebSocket_Connected (WebSocket1 As WebSocket)
    '----------------------MODIFICATION-------------------------------
    'log("connected")
    ws = WebSocket1
    ABMPageId = ABM.GetPageID(page, Name,ws)
    DateTime.DateFormat="dd/MM/yyyy"
    DateTime.timeFormat="HH:mm"

    Dim session As HttpSession = ABM.GetSession(ws, ABMShared.SessionMaxInactiveIntervalSeconds)
    If session.IsNew Then
        session.Invalidate
        ABMShared.NavigateToPage(ws, "", "./")
        Return
    End If

    If ABMShared.NeedsAuthorization Then
        If session.GetAttribute2("IsAuthorized", "") = "" Then
            ABMShared.NavigateToPage(ws, ABMPageId, "../")
            Return
        End If
    End If
   
    UserId=session.GetAttribute("UserId")
    ABMShared.UpdateUserTimestamp(UserId)
    Log("*PAGE: " & Name & " ***" & ws.Session.GetAttribute("authName") & "@" & ABMShared.timestamp & ", Expired Subscription: " & ws.Session.GetAttribute("Expired"))
   
   
    If session.GetAttribute("Expired")="Yes" Then
        ABMShared.NavigateToPage(ws, ABMPageId, "../UserInfo")
        Return
    End If
   
   
   
    ABM.UpdateFromCache(Me, ABMShared.CachedPages, ABMPageId, ws)
    If page.ComesFromPageCache Then
        ' when we have a page that is cached it doesn't matter if it comes or not from a new connection we serve the cached version.
        'Log("comes from cache")
        page.Refresh
        page.FinishedLoading
    Else
        If page.WebsocketReconnected Then
            Log("websocket reconnected")
            ' when we have a client that doesn't have the page in cache and it's websocket reconnected and also it's session is new - basically when the client
            ' had internet problems and it's session (and also cache) expired before he reconnected so the user has content in the browser but we don't have
            ' any on the server. So we need to reload the page.
            ' when a client that doesn't have the page in cache and it's websocket reconnected but it's session is not new - when the client had internet
            ' problems and when he reconnected it's session was valid but he had no cache for this page we need to reload the page as the user browser has
            ' content, reconnected but we have no content in cache
            ABMShared.NavigateToPage (ws, ABMPageId, "./" & page.PageHTMLName)
        Else
            ' when the client did not reconnected it doesn't matter if the session was new or not because this is the websockets first connection so no dynamic
            ' content in the browser ... we are going to serve the dynamic content...
            Log("websocket first connection")
            page.Prepare
            ConnectPage
        End If
    End If
    'log("abmPageId)
    '----------------------MODIFICATION-------------------------------

This is the main part of the Web_Socket_connected of the target page
B4X:
Private Sub WebSocket_Connected (WebSocket1 As WebSocket)
    '----------------------MODIFICATION-------------------------------
    'log("connected")
    ws = WebSocket1
    Dim txt As String = ws.UpgradeRequest.GetParameter("prmtr")
    ActiveArticle = txt.Replace("/","")
'    Log(ActiveArticle)
    ABMPageId = ABM.GetPageID(page, Name,ws)
    DateTime.DateFormat="dd/MM/yyyy"
    DateTime.timeFormat="HH:mm"
   
    Dim session As HttpSession = ABM.GetSession(ws, ABMShared.SessionMaxInactiveIntervalSeconds)
   
    If session.IsNew Then
        session.Invalidate
        ABMShared.NavigateToPage(ws, "", "./")
        Return
    End If

    If ABMShared.NeedsAuthorization Then
        If session.GetAttribute2("IsAuthorized", "") = "" Then
            ABMShared.NavigateToPage(ws, ABMPageId, "../")
            Return
        End If
    End If
   
    UserId=session.GetAttribute("UserId")
    ABMShared.UpdateUserTimestamp(UserId)
    Log("*PAGE: " & Name & " ***" & ws.Session.GetAttribute("authName") & "@" & ABMShared.timestamp & ", Expired Subscription: " & ws.Session.GetAttribute("Expired"))
   
   
   
    ABM.UpdateFromCache(Me, ABMShared.CachedPages, ABMPageId, ws)
    If page.ComesFromPageCache Then
        ' when we have a page that is cached it doesn't matter if it comes or not from a new connection we serve the cached version.
        'log("comes from cache")
        page.Refresh
        page.FinishedLoading
    Else
        If page.WebsocketReconnected Then
            'log("websocket reconnected")
            ' when we have a client that doesn't have the page in cache and it's websocket reconnected and also it's session is new - basically when the client
            ' had internet problems and it's session (and also cache) expired before he reconnected so the user has content in the browser but we don't have
            ' any on the server. So we need to reload the page.
            ' when a client that doesn't have the page in cache and it's websocket reconnected but it's session is not new - when the client had internet
            ' problems and when he reconnected it's session was valid but he had no cache for this page we need to reload the page as the user browser has
            ' content, reconnected but we have no content in cache
            ABMShared.NavigateToPage (ws, ABMPageId, "./" & page.PageHTMLName)
        Else
            ' when the client did not reconnected it doesn't matter if the session was new or not because this is the websockets first connection so no dynamic
            ' content in the browser ... we are going to serve the dynamic content...
            'log("websocket first connection")
            page.Prepare
            ConnectPage
        End If
    End If
    'log("abmPageId)
    '----------------------MODIFICATION-------------------------------


This is the NavigateToPageNewTab
B4X:
'----------------------START MODIFICATION 4.00-------------------------------
Public Sub NavigateToPageNewTab(ws As WebSocket, PageId As String, TargetUrl As String, OpenInNewTab As Boolean) 'ignore
    Dim testTargetUrl As String = TargetUrl
    If Not(testTargetUrl.EndsWith(".htm") Or testTargetUrl.EndsWith(".html") Or testTargetUrl.EndsWith("/")) Then
        TargetUrl = TargetUrl & "/"
    End If
    If PageId.Length > 0 Then ABM.RemoveMeFromCache(CachedPages, PageId)
    If ws.Open Then
        If OpenInNewTab Then
            Dim s As String
            ' check if a mobile phone only
'            s = $"var check = false;
            '              (function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))) check = true;})(navigator.userAgent||navigator.vendor||window.opera);
            '              if (check) {
            '                  window.location = arguments[0];
            '              } else {
            '                  window.open(arguments[0],'_blank');
            '              }"$
           
            ' check if a mobile phone or a tablet
            s = $"var check = false;
              (function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))) check = true;})(navigator.userAgent||navigator.vendor||window.opera);
               if (check) {
                  window.location = arguments[0];
              } else {
                window.open(arguments[0],'_blank');                
              }"$          
            ws.Eval(s, Array As Object(TargetUrl))
        Else
            ws.Eval("window.location = arguments[0]", Array As Object(TargetUrl))
        End If
        ws.Flush
        ws.Close ' ALSO NEW 4.00
    End If
End Sub
'----------------------END MODIFICATION 4.00-------------------------------
 

Attachments

  • vid2.gif
    vid2.gif
    485.5 KB · Views: 41
Last edited:
Solution
Please provide me with a simple example project to see what is happening (try our attempt first maybe). It appears maybe something in your code is causing a reload of the first page. I've never seen this behavior in our apps.

I see we've splitted up this call to an open in new tab and current tab and we do not do the ws.close anymore + in the Tab function we do not remove it from the cache. Maybe quite some time ago, one of our programmers has seen the same behavior as you and made this change, but I can't find any documentation on why this change was made.

B4X:
Public Sub NavigateToPage(ws As WebSocket, PageId As String, TargetUrl As String) 
    If PageId.Length > 0 Then ABM.RemoveMeFromCache2(CachedPages, PageId, "manually removed...

Philip Chatzigeorgiadis

Active Member
Licensed User
Longtime User
I have found one (alas, partial) workaround.

Instead of using ABMShared.NavigateToPageNewTab, if ABM.ViewerOpen is called, then the target web page opens in a new tab without affecting the source web page.

However, this solution is elegant only if the default browser (called by the ABM.ViewerOpen) is the same as the one where the source web page is viewed. Otherwise, the target web page will open in a different (i.e. the default) browser.

It would be great if there was a way that the ABMShared.NavigateToPageNewTab behavior could be altered to keep the source page contents unaltered, instead of resetting it.
 
Upvote 0

Philip Chatzigeorgiadis

Active Member
Licensed User
Longtime User
@alwaysbusy, can you please confirm if there is a full solution/workaround on this issue.

I have been experimenting for about 2 weeks now and I have only found the partial workaround I mention in the previous post.

Thank you!
 
Upvote 0

alwaysbusy

Expert
Licensed User
Longtime User
Please provide me with a simple example project to see what is happening (try our attempt first maybe). It appears maybe something in your code is causing a reload of the first page. I've never seen this behavior in our apps.

I see we've splitted up this call to an open in new tab and current tab and we do not do the ws.close anymore + in the Tab function we do not remove it from the cache. Maybe quite some time ago, one of our programmers has seen the same behavior as you and made this change, but I can't find any documentation on why this change was made.

B4X:
Public Sub NavigateToPage(ws As WebSocket, PageId As String, TargetUrl As String) 
    If PageId.Length > 0 Then ABM.RemoveMeFromCache2(CachedPages, PageId, "manually removed from the Cache")
 
    Try
        If ws.Open Then
            ws.Eval("window.name='';window.location = arguments[0]", Array As Object(TargetUrl))
            ws.Flush
        Else
            Log("ws was closed: " & PageId & ", url: " & TargetUrl ) 
        End If     
    Catch
        Log(LastException.Message)     
    End Try     
End Sub

Public Sub NavigateToPageTab(ws As WebSocket, PageId As String, TargetUrl As String)
    If ws.Open Then
        Dim s As String         
        ' check if a mobile phone or a tablet
        s = $"var check = false;
          (function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))) check = true;})(navigator.userAgent||navigator.vendor||window.opera);
           if (check) {
              window.location = arguments[0];
          } else {
            window.open(arguments[0],'_blank');               
          }"$         
        ws.Eval(s, Array As Object(TargetUrl))                         
        ws.Flush
    End If
End Sub

Alwaysbusy
 
Last edited:
Upvote 0
Solution

Philip Chatzigeorgiadis

Active Member
Licensed User
Longtime User
Please provide me with a simple example project to see what is happening (try our attempt first maybe). It appears maybe something in your code is causing a reload of the first page. I've never seen this behavior in our apps.

I see we've splitted up this call to an open in new tab and current tab and we do not do the ws.close anymore + in the Tab function we do not remove it from the cache. Maybe quite some time ago, one of our programmers has seen the same behavior as you and made this change, but I can't find any documentation on why this change was made.

B4X:
Public Sub NavigateToPage(ws As WebSocket, PageId As String, TargetUrl As String)
    If PageId.Length > 0 Then ABM.RemoveMeFromCache2(CachedPages, PageId, "manually removed from the Cache")
 
    Try
        If ws.Open Then
            ws.Eval("window.name='';window.location = arguments[0]", Array As Object(TargetUrl))
            ws.Flush
        Else
            Log("ws was closed: " & PageId & ", url: " & TargetUrl )
        End If    
    Catch
        Log(LastException.Message)    
    End Try    
End Sub

Public Sub NavigateToPageTab(ws As WebSocket, PageId As String, TargetUrl As String)
    If ws.Open Then
        Dim s As String        
        ' check if a mobile phone or a tablet
        s = $"var check = false;
          (function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))) check = true;})(navigator.userAgent||navigator.vendor||window.opera);
           if (check) {
              window.location = arguments[0];
          } else {
            window.open(arguments[0],'_blank');              
          }"$        
        ws.Eval(s, Array As Object(TargetUrl))                        
        ws.Flush
    End If
End Sub

Alwaysbusy

I am away from my main development computer right now but I did test your suggestion in a simple ABMaterial project (just one page with an ABMInput and a button that opens a second page in a new tab).
With the code you provided above, whatever was entered in the ABMInput on the first page remains unchanged when the second page opens in the new tab (while with the old NavigatetoPageNewTab the ABMInput content was reset).

So, it looks that it works!
I will check your code in my main project tonight in more complex pages (just to be sure) and report back.

In any case, a big THANK YOU for your help!
 
Upvote 0
Top