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