lord_nemesis, the code is hard to read in email form. Would you mind
putting it on http://pastebin.mozilla.org/ and sending out the link?

Cheers,
-bholley

On Thu, Dec 22, 2011 at 8:39 AM, Benjamin Smedberg <benja...@smedbergs.us>wrote:

> On 12/22/2011 10:45 AM, lord_nemesis wrote:
>
>> Hello Benjamin (I am putting the name directly as I got help through
>> him and now having issue in that area),
>>    This issue is putting us in most discomfort situation in business
>> line... Please take time and help us out from here....
>>
>> Problem:
>>   We have a page that that is throwing a JS exception when running in
>> our embedded gecko browser, but working fine in firefox. The page a
>> javascript function which checks the value of a global though an if
>> condition. the same is set an initial value in the<head>  section of
>> the page. some thing like this
>>
> I really have no clue about the correct way to do what you're doing.
> Perhaps bholley.
>
> --BDS
>
>>
>> test = "";
>>
>> myfunc()
>> {
>>      if (test&&  ...) {
>>      }
>> }
>>
>> as you can see, test is not a var type. Its a global property. In our
>> embedded gecko application, we are getting a "ReferenceError: test is
>> undefined" exception when trying to check the value of test. This is
>> however not happening in Firefox browser  built from the same
>> codebase.
>>
>> After some debugging, we arrived at the conclusion that our own code
>> to call  javascript functions on the page is causing some issue.
>>
>> our code for the same looks some thing like this. This is used to
>> invoke custom js functions in some pages, but not on on the particular
>> one that we are having problem with. can you please see if there is
>> anything wrong with this code and also help us with solving the
>> problem.
>>
>>
>>
>> CallJavaScript(const CString&  strJSFnName, const CStringArray&
>> paramArray, CString&  strRetVal)
>> {
>>      try {
>>            nsresult resultVal = NS_OK;
>>            nsCOMPtr<nsIDOMDocument>  domDoc;
>>
>>            if(nsnull == m_webNavigation ) //null check to avoid crash
>> &  show blank page incase of Webnavigation handle null
>>            {
>>                 return false;
>>            }
>>
>>            // Get the Document DOM
>>            resultVal = m_webNavigation-
>>
>>> GetDocument(getter_AddRefs(**domDoc));
>>>
>>            if (NS_FAILED(resultVal))
>>            {
>>                 return false;
>>            }
>>
>>            // Get Document from DOM.
>>            nsCOMPtr<nsIDocument>  doc = do_QueryInterface(domDoc,
>> &resultVal);
>>            if (NS_FAILED(resultVal))
>>            {
>>                 return false;
>>            }
>>
>>            // Get the Script Global Object from Document
>>
>>            nsCOMPtr<**nsIScriptGlobalObject>  scriptGlobalObj(doc-
>>
>>> GetScriptGlobalObject());
>>>
>>            if (scriptGlobalObj == nsnull) {
>>                 return false;
>>            }
>>
>>            // Get the Script Context
>>            nsCOMPtr<nsIScriptContext>  scriptContext(scriptGlobalObj-
>>
>>> GetContext());
>>>
>>            if (scriptContext == nsnull) {
>>                 return false;
>>            }
>>
>>            // Get the JSContext.
>>            JSContext *pJSContext =
>> reinterpret_cast<JSContext*>(**scriptContext->**GetNativeContext());
>>            JSObject *pJSObject = scriptGlobalObj->**GetGlobalJSObject();
>>
>>            {
>>                 AutoSetupJSContext setupJSContext(pJSContext);
>>
>>                 jsval jsReturnVal = 0;
>>
>>                 // Build the Input argument list
>>                 int argCount =paramArray.GetSize();
>>                 jsval *pJSInputArgs = new jsval[argCount];
>>
>>                 for (int argIndex = 0; argIndex<  argCount; +
>> +argIndex) {
>>                      CString argStr = paramArray.GetAt(argIndex);
>>                      jschar *pJSArgChars = (jschar *)
>> (argStr.GetBuffer(argStr.**GetLength()));
>>                      JSString *jsArgStr =
>> JS_NewUCStringCopyZ(**pJSContext, pJSArgChars);
>>                      argStr.ReleaseBuffer();
>>                      pJSInputArgs[argIndex] =
>> STRING_TO_JSVAL(jsArgStr);
>>                 }
>>
>>                 int jsFuncNameLen = WideCharToMultiByte(CP_ACP, 0,
>> (LPCWSTR)(LPCTSTR)strJSFnName, -1, 0, 0, NULL, NULL);
>>                 char* pJSFuncName = new char[jsFuncNameLen + 1];
>>                 WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)
>> (LPCTSTR)strJSFnName, -1, pJSFuncName, jsFuncNameLen, NULL, NULL);
>>
>>                 JSBool isJSCallSuccess =
>> JS_CallFunctionName(**pJSContext, pJSObject, pJSFuncName, argCount,
>> pJSInputArgs,&jsReturnVal);
>>
>>
>> class AutoSetupJSContext {
>> public:
>>      AutoSetupJSContext(JSContext *pJSContext)
>>                 : m_JSContextStack(), m_pJSContext(pJSContext)
>>      {
>>            nsresult resultVal = NS_OK;
>>
>>            // Get the JSContext Stack.
>>            m_JSContextStack = 
>> do_GetService("@mozilla.org/**js/xpc/<http://mozilla.org/js/xpc/>
>> ContextStack;1",&resultVal);
>>            ASSERT(m_JSContextStack != nsnull);
>>
>>            // Push the JSContext to JSContext Stack.
>>            resultVal = m_JSContextStack->Push(m_**pJSContext);
>>            ASSERT(resultVal == NS_OK);
>>
>>            // Set an Error handler on the JSContext. This handler will
>> get control when ever
>>            // there is an error with executing a JS Function.
>>            JS_SetErrorReporter(**pJSContext, JSErrorHandler);
>>
>>            // Begin JS Request. This will ensure that we wait till any
>> current activity on the
>>            // JSContext is completed before we do our own.
>>            JS_BeginRequest(pJSContext);
>>      }
>>
>>      ~AutoSetupJSContext(void)
>>      {
>>            nsresult resultVal = NS_OK;
>>
>>            // End the JS Request. We relinquish hold on the JSContext.
>>            JS_EndRequest(m_pJSContext);
>>
>>            // Pop the JSContext from stack.
>>            resultVal = m_JSContextStack->Pop(nsnull);
>>           ASSERT(resultVal == NS_OK);
>>      }
>>
>> private:
>>      nsCOMPtr<nsIJSContextStack>  m_JSContextStack;
>>      JSContext *m_pJSContext;
>> };
>> ______________________________**_________________
>> dev-embedding mailing list
>> dev-embedding@lists.mozilla.**org <dev-embedding@lists.mozilla.org>
>> https://lists.mozilla.org/**listinfo/dev-embedding<https://lists.mozilla.org/listinfo/dev-embedding>
>>
>
>
_______________________________________________
dev-embedding mailing list
dev-embedding@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-embedding

Reply via email to