It seems that "$ smth is not a function" is a very common JavaScript problem, but after looking at quite a few threads, I still cannot figure out what causes this in my case.
I have a custom object that is defined as:
function Scorm_API_12() { var Initialized = false; function LMSInitialize(param) { errorCode = "0"; if (param == "") { if (!Initialized) { Initialized = true; errorCode = "0"; return "true"; } else { errorCode = "101"; } } else { errorCode = "201"; } return "false"; }
Then in another script, I try to use this API as follows:
var API = null; function ScormProcessInitialize(){ var result; API = getAPI(); if (API == null){ alert("ERROR - Could not establish a connection with the API."); return; }
The getAPI () stuff is as follows:
var findAPITries = 0; function findAPI(win) { // Check to see if the window (win) contains the API // if the window (win) does not contain the API and // the window (win) has a parent window and the parent window // is not the same as the window (win) while ( (win.API == null) && (win.parent != null) && (win.parent != win) ) { // increment the number of findAPITries findAPITries++; // Note: 7 is an arbitrary number, but should be more than sufficient if (findAPITries > 7) { alert("Error finding API -- too deeply nested."); return null; } // set the variable that represents the window being // being searched to be the parent of the current window // then search for the API again win = win.parent; } return win.API; } function getAPI() { // start by looking for the API in the current window var theAPI = findAPI(window); // if the API is null (could not be found in the current window) // and the current window has an opener window if ( (theAPI == null) && (window.opener != null) && (typeof(window.opener) != "undefined") ) { // try to find the API in the current window s opener theAPI = findAPI(window.opener); } // if the API has not been found if (theAPI == null) { // Alert the user that the API Adapter could not be found alert("Unable to find an API adapter"); } return theAPI; }
Now the API is probably found, because I do not get the message "Unable to find ...", the code is trying to initialize it. But firebug tells me the API.LMSInitialize is not a function , and if I try to debug it using alert(Object.getOwnPropertyNames(API)); he will give me an empty warning.
What am I missing?
javascript javascript-objects
Saltynuts
source share