Thanks to Ian and Eric for an interesting question and direction.
Following Eric's lead I found (in all but Safari)
a built-in object BroadcastChannel which is what it claims to be. The
following 2 scripts illustrate its use in the
jhs context to perform what Ian requested. Perhaps there are 'polyfills'
for Safari?

load each into jijx
open page http://localhost:65001/messager
open page http://localhost:65001/message

enter text in textarea of messager page and click button

look at message page

browser debug stops in postMessage and bc.onmessage in messager and
message respectively
allow helpful insights

NB. =================Sender==============

Note''
load into jijx
open page http://localhost:65001/messager
enter text in textarea and click button

~Projects/broadcastchannel/messager.ijs
Send message via Broadcast Channel object
https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API
~addons/jhs/app/app1.ijs
)

coclass'messager'
coinsert'jhs'

MESSAGE__=: 'Hello World 2'

HBS=: 0 : 0
     jhh1'message - sender'
     jhhr
 'b1'jhb'b 1'
 't1'jhtext MESSAGE__;20
     desc
)

desc=: 0 : 0
<pre>
Send message via Broadcast Channel object
pressing b1 sends the text in 't1'
</pre>
)

NB. verb that responds to browser request for app1 page
NB. (tab title) jhrx (browser source to create the page)
jev_get=: 3 : 0
'messager'jhrx(getcss''),(getjs''),gethbs''
)

ev_bc_onmessage=: 3 : 0
 newval=.getv'jdata'
 jhrajax ('ev_bc_onmessage_',(;coname''),'_'),JASEP,newval
)

JS=: 0 : 0
// Connection to a broadcast channel
var bc
    ,jfn='ev_bc_onmessage_messager_ 0';

// Example of sending of a very simple message
function postMessage(msg){
 var o={};
 o.newval=msg;
 o.jfn=jfn;
 bc.postMessage(o);
}

function ev_b1_click(){
 var msg = jbyid('t1').value;
 postMessage(msg);
}

function ev_body_load(){
// Connect to a broadcast channel
bc = new BroadcastChannel('test_channel');
}

)

=================Receiver: load in jijx==============
Note''
load into jijx
open page http://localhost:65001/message

~Projects/broadcastchannel/message.ijs
receive message via BroadcastChannel
https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API
~addons/jhs/app/app1.ijs
)

coclass'message'
coinsert'jhs'

HBS=: 0 : 0
     jhh1'message - receiver'
     jhhr
 't1'jhtext'text field 1';20
 't2'jhtext'text field 2';20
     desc
)

desc=: 0 : 0
<pre>
receive message via BroadcastChannel
</pre>
)

NB. verb that responds to browser request for message page
NB. (tab title) jhrx (browser source to create the page)
jev_get=: 3 : 0
'receiver'jhrx(getcss''),(getjs''),gethbs''
)

ev_bc_onmessage=: 3 : 0
 smoutput seebox NV
 newval=.getv't1'
 jhrajax ('ev_bc_onmessage_',(;coname''),'_'),JASEP,newval
)

ev_flip_click=:ev_bc_onmessage

JS=: 0 : 0
var bc;

function ev_body_load(){
// Connect to a broadcast channel
 bc = new BroadcastChannel('test_channel');

 // bc event handler
 bc.onmessage = function(ev) { 
   console.log(ev);
   jbyid('t1').value = ev.data.newval;
   jbyid('t2').value = '';
   jscdo("flip");
 }
}

// send t1 name/value pair to J
function ev_flip_click(){jdoajax(["t1"],'','',true);}

// j response to msg
function ev_flip_click_ajax(ts){
 jbyid('t2').value = ts[1].toUpperCase();
}

)
============================================================================
On 09/06/2017 12:45 AM, Eric Iverson wrote:
> Ian,
> By resources, I meant google. The phrase that will get you started is
> 'javascript shared local storage'. A search of the JHS scripts will show a
> few simple places where it is currently used. But there is no current use
> of the very interesting event triggers.
>
> On Tue, Sep 5, 2017 at 11:35 PM, Ian Clark <earthspo...@gmail.com> wrote:
>
>> @Eric
>>
>> This could be useful. But my Javascript is so poor I can't really say until
>> I've tried it.
>>
>>> One page setting shared memory can trigger an event in the javascript of
>> the
>> other page. Is this of interest?
>>
>> Yes. When I first started thinking about my requirements, this was just the
>> sort of generalized facility I'd hoped might exist.
>> I could then arrange for something to happen in the _message_ page as a
>> result of pressing Enter in _jijx_. Typically, force a reload of the page.
>> Or just part of it.
>>
>> It would be nice too to be able to inspect the input line itself, e.g. for
>> the target of "=:", to display it in _message_.
>>
>> Presently I'm experimenting with macOS apps with embedded JHS, and am
>> almost at the beta stage. But if shared memory delivers what it appears to
>> hold out, I could shelve this approach in favor of using JHS "out of the
>> box" with any modern browser. My platform-migration problems would go away.
>>
>>> …but the resources documneting its use are more that adequate.
>> I take it you're talking about online javascript resources, not JAL
>> resources. Can you give me a link pls?
>>
>> On Tue, Sep 5, 2017 at 10:43 PM, Eric Iverson <eric.b.iver...@gmail.com>
>> wrote:
>>
>>> Ian (your JHS question),
>>>
>>> There is a facility in javascript in the browser called shared memory.
>> JHS
>>> uses this in a very limited way, but I have always wanted to revisit it
>> to
>>> see what else could be done.
>>>
>>> One page setting shared memory can trigger an event in the javascript of
>>> the other page. Is this of interest?
>>>
>>> The existence of javascript shared memory has kept a low profile, but the
>>> resources documneting its use are more that adequate.
>>>
>>> On Mon, Sep 4, 2017 at 10:20 PM, Ian Clark <earthspo...@gmail.com>
>> wrote:
>>>> In case that's not clear enough, here's an ultra-simple example,
>> stripped
>>>> of all the clutter.
>>>>
>>>> Here's the content of my script: '~user/message.ijs' ...
>>>> ———————————————————————————
>>>> coclass 'message'
>>>> coinsert 'jhs'
>>>>
>>>> MESSAGE__=: 'Hello World'
>>>>
>>>> MYTEMPLATE=: 0 : 0
>>>> HTTP/1.1 200 OK
>>>> Content-Type: text/html; charset=utf-8
>>>> Connection: close
>>>>
>>>> <pre>
>>>> PAGECONTENT
>>>> </pre>
>>>> )
>>>>
>>>> jev_get=: 3 : 0
>>>> hrtemplate=: MYTEMPLATE rplc 'PAGECONTENT' ; MESSAGE__
>>>> 'message' jhr ''
>>>> )
>>>> ———————————————————————————
>>>>
>>>> Load it and browse the URL:   http://localhost:65001/message
>>>>
>>>> You see a mostly empty window (call it the message window) displaying:
>>>>
>>>> Hello World
>>>>
>>>>
>>>> Now I want to turn to the jijx window (http://localhost:65001/jijx)
>> and
>>>> enter
>>>>
>>>>      MESSAGE__=: 'Hello New World'
>>>>   refresh''
>>>>
>>>> without having to touch the message window.
>>>> How do I write the verb: refresh ?
>>>>
>>>> It goes without saying that in practice I want to display something
>> more
>>>> elaborate than the contents of a single noun residing in the base
>> locale.
>>>> But the principle will be the same.
>>>>
>>>>
>>>> On Tue, Sep 5, 2017 at 2:59 AM, Ian Clark <earthspo...@gmail.com>
>> wrote:
>>>>> Suppose I am a JHS coder, working with the J session (the jijx page),
>>> and
>>>>> have written an app called "message" (say). This generates a page of
>>> data
>>>>> in response to the URL:
>>>>>
>>>>> http://localhost:65001/message
>>>>>
>>>>> which I choose to display in a separate browser window. Let's call it
>>> the
>>>>> message window.
>>>>>
>>>>> If I execute some phrase in jijx which changes the content of the
>>> message
>>>>> window, then in the normal course of things I would need to manually
>>>> reload
>>>>> the page in order to see the altered data. For example (in Safari) by
>>>>> activating the message window and clicking the symbol: "Reload this
>>>> page".
>>>>> How can I write a verb (to be executed in jijx) which refreshes the
>>>>> message window without having to do that?
>>>>>
>>>>>
>>>> ----------------------------------------------------------------------
>>>> For information about J forums see http://www.jsoftware.com/forums.htm
>>>>
>>> ----------------------------------------------------------------------
>>> For information about J forums see http://www.jsoftware.com/forums.htm
>>>
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
>>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm


----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to