[webkit-help] Calling Javascript Method from CPP
Sumedh
vsbhogle at gmail.com
Tue Aug 30 00:00:21 PDT 2011
Hi,
We are customizing webkit apple port. I have written a method to call
javascript function from cpp code. Following is the code, please tell me if
anything wrong.
void Invoke_Script(HWND hwnd,char *script_name, int argc, ...) {
int i;
HRESULT hr;
va_list ap;
char *script_arg;
IWebView* lWebView = 0;
IWebFrame* frame = 0;
JSContextRef context;
JSValueRef *arguments=NULL;
JSStringRef functionName,argStr;
JSObjectRef globalObject,functionObject;
//Get WebView Interface Object
lWebView = (IWebView *)GetWindowLong(hwnd, GWL_USERDATA);
//Get the Web Frame
hr = lWebView->mainFrame(&frame);
if (FAILED(hr))
goto exit;
//Get the Context Ref
context = frame->globalContext();
//Get the Global Object
globalObject = JSContextGetGlobalObject(context);
//Get the Function Name in JSString
functionName = JSStringCreateWithUTF8CString(script_name);
//Get the Arguments
va_start(ap,argc);
if(argc>0)
arguments = (JSValueRef*)GlobalAlloc(GPTR,sizeof(JSValueRef)*argc);
//for (i=argc-1;i>=0;i--) {
for (i=0;i<argc;i++) {
script_arg=va_arg(ap,char*);
argStr = JSStringCreateWithUTF8CString(script_arg);
arguments[i] = JSValueMakeString(context, argStr);
JSStringRelease(argStr);
script_arg+=strlen(script_arg)+1;
}
va_end(script_arg);
//Get a reference to your Javascript function
functionObject = (JSObjectRef)JSObjectGetProperty(context, globalObject,
functionName, NULL);
//Call the JS Function
JSValueRef result = JSObjectCallAsFunction(context, functionObject,
globalObject, 1, arguments, NULL);
JSStringRelease(functionName);
GlobalFree(arguments);
exit:
if (frame)
frame->Release();
}
If this code is right, why my memory is spiking when i call this function.
JSValueRef is retained as far as apple documentation, but then when it is
garbage collected. The issue is, we are calling this method say n times in a
minute, memory goes on increasing and is not freed. (We are checking memory
footprint in task manager). First I thought that may be i was leaking memory
in my internal code. But then found out that if i don't call this function,
memory print does not climb. Have i implemented this function correctly?
Dhanyawaad (Thanks)
--
Namaskar,
Sumedh S Bhogle
Mumbai | Mob. 09969085122
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-help/attachments/20110830/9cd96335/attachment.html>
More information about the webkit-help
mailing list