I have a working browser plug-in. I'd like to pass some binary data (byte[], or void *, length) to the plug-in. I can't seem to find the right type such that var::isBinaryData() is true, as I'd like to use var::getBinaryData() to retreive a MemoryBlock * to the data. It should be noted that all var:isXXX methods, except var::isObject(), are returning false;
If I know the data is binary is there a brute force mechanism I could use to get a MemoryBlock * to the data?
Here's a code snippet from my plug-in...
static var sendData(const var::NativeFunctionArgs &args) { if (MyBrowserObject* b = dynamic_cast<MyBrowserObject*> (args.thisObject.getObject())) { if (args.numArguments == 1) { bool binData = args.arguments[0].isBinaryData(); // <-------ALWAYS FALSE if (!binData) { Logger::outputDebugString("[sendData] arg[0] is not binary data"); return var(-3); } MemoryBlock *data = args.arguments[0].getBinaryData(); // do something with data... } Logger::outputDebugString("[sendData] invalid number of args"); return var(-4); } Logger::outputDebugString("[sendData] thisObject is null"); return var(-5); }
In my javascript, I've tried passing ArrayBuffer, Uint8Array and Blob, but all three fail the .isBinary().
var buf = new ArrayBuffer(256); var view = new Uint8Array(buf); view[0] = 64; // '@' view[1] = 65; // 'A' view[2] = 66; // 'B' view[4] = 67; // 'C' view[5] = 68; // 'D' var myBlob = new Blob([buf], { type: 'application/octet-binary' }); console.log("buf == " + buf.toString()); // 'object ArrayBuffer' console.log("view == " + view.toString()); // 'object Uint8Array' console.log("myBlob == " + myBlob.toString()); // 'object Blob' var xx = getPlugin().sendData (buf); xx = getPlugin().sendData(view); xx = getPlugin().sendData(myBlob);
All other interfaces on my plug-in work (they accept int, string or double/float).