Hi again Ernie,
There's no real reason why it shouldn't work in a browser except that I haven't tried it in a while, it tends to be easier to try things out using node.js and doing some more browser tests was on my TODO list :-)

The error "Uncaught TypeError: Cannot read property 'fa' of null" is less than helpful :-) that's 'cause it has been minified with closure.

I doubt that you are doing anything especially wrong it'll just be something stupid I've done.

If you look in the CMake and set closure 0 in this bit:

LINK_FLAGS "-s \"EXPORT_NAME='proton'\" -s \"WEBSOCKET_SUBPROTOCOL='AMQPWSB10'\" -O2 --closure 1 --memory-init-file 0

and recompile you'll get a more useful error but TBH if you can bear with me I'll try to take a look as it tomorrow, I can't do much this evening 'cause I've been putting up a fence and I'm knackered :-)

I'll give you a ping when I've sorted it .....

Frase


On 30/08/14 16:25, Ernest Allen wrote:
Hi Fraser,
I'm trying to run the proton javascript bindings from within a browser. I'm 
getting various errors depending on the way I'm doing it and I was hoping you 
could shed some light on the correct approach.
I have node recv.js running in a separate window.

The first way I tried was just including proton.js directly. When I load the 
page the console shows the following for the HTML listed below:
pre-main prep time: 6 ms
proton is [object Object]
before put
Uncaught TypeError: Cannot read property 'fa' of null
Uncaught TypeError: Cannot read property 'fa' of null

Here is the HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
<html xmlns="http://www.w3.org/1999/xhtml";>

<head>
        <title>An XHTML 1.0 Strict standard template</title>
        <meta http-equiv="content-type"
                content="text/html;charset=utf-8" />

<script type="text/javascript" 
src="../../../node_modules/qpid-proton/lib/proton.js"></script>

<script type="text/javascript">
//<![CDATA[

console.log("proton is " + window.proton);
var address = "amqp://0.0.0.0";
var subject = "BrowserMessage";
var msgtext = "Hello From Browser!";
var tracker = null;
var running = true;

var message = new proton.Message();
var messenger = new proton.Messenger();

var pumpData = function() {
     var status = messenger.status(tracker);
     if (status != proton.Status.PENDING) {
         if (running) {
             messenger.stop();
             running = false;
         }
     }

     if (messenger.isStopped()) {
         message.free();
         messenger.free();
     }
};

messenger.on('error', function(error) {console.log("this is the error" + 
error);});
messenger.on('work', pumpData);
messenger.setOutgoingWindow(1024);
messenger.start();

message.setAddress(address);
message.setSubject(subject);
message.body = msgtext;

console.log("before put");
messenger.put(message);

        
//]]>
</script>
</head>

<body>
</body>

</html>

The output in the window running node recv.js is:
[0x535398]:ERROR[-2] AMQP header mismatch: '' (connection aborted)

CONNECTION ERROR connection aborted (remote)



When I browserify the proton.js into qpid-proton-browser.js and load that file 
instead, I get the following when the page loads:
Uncaught TypeError: Cannot read property 'replace' of undefined
proton is undefined
Uncaught ReferenceError: proton is not defined

The Uncaught TypeError is due to a referece to "process.argv[1]". If I manually edit the 
qpid-proton-browser.js file to define all the process properties that it wants, I still get the 
"proton is undefined" error.

Do you know what I'm doing wrong?

Thanks,
-Ernie

Reply via email to