I don't think that the browser's cache is concern : I have tried from an other pc, with the same problem.
I have tried again, and now, I got the full login screen.
So I have tried to login with user admin.
The time out message mentionned in my first post occurs again, and here are the debug screens given by firefox.
Fatal error: Maximum execution time of 60 seconds exceeded in C:\xampp\htdocs\Projeqtor\tool\projeqtor.php on line 395
************ Console:
"=> 322ms | page='../tool/loginCheck.php' | destination='loginResultDiv' | formName=loginForm'" projeqtor.js:75:2
Object { message: "Unable to load ../tool/saveDataToSe…", stack: ".cache["dojo/errors/create"]/</</_4…", response: Object, status: 0, responseText: "", xhr: XMLHttpRequest } dojo.js:15:102024
Object { message: "Unable to load ../tool/saveDataToSe…", stack: ".cache["dojo/errors/create"]/</</_4…", response: Object, status: 0, responseText: "", xhr: XMLHttpRequest } dojo.js:15:102024
+ 3 Debug screens:
************** Debug (...data\BrowserSpecificScript.js):
'use strict';
var resourceURL = "resource://skype_ff_extension-at-jetpack/skype_ff_extension/data/";
/**
* Returns the console used for logging
*/
function getConsole() {
return unsafeWindow.console;
}
/**
* Returns the document
*/
function getDocument() {
return unsafeWindow.document;
}
/**
* Returns true if document is HTML
*/
function isHtmlPage() {
return (unsafeWindow.document.contentType === "text/html") ||
// Check for XHTML document
(unsafeWindow.document.contentType === "application/xhtml+xml");
}
/**
* Our name
*/
function getPluginName() {
return "FFTB";
}
/**
* Writes a log line to the JS console
*
* @param item - Item to log
*/
function Log(item) {
//getConsole().log(item);
}
/**
* Writes a timestamp (milliseconds since epoch) and a message to the JS console
* Separate function from Log so that it can be enabled/disabled separately
*/
function LogTimestamp(message) {
//getConsole().log(performance.now() + " ms since navigationStart: " + message);
}
/**
* Sends a message to the background page requesting settings to be sent
*/
function postSettingsRequest() {
self.port.emit("GET_SETTINGS_REQUEST");
}
// Register a listener for when background page wants to send us settings changes
// done by the user
self.port.on("GET_SETTINGS_RESPONSE", function(message) {
processSettingsResponse(message);
});
*************** Debug (../data/contenScript.js) :
'use strict';
/**
* Returns the product version number
*
* @return Product version number
*/
function getProductVersion() {
return "7.3.16540.9015";
}
/**
* @brief Class that stores pair key:HTMLElement
* key is auto incremented when new element is added
* When you call getElement method the pair will be deleted from the collection
*/
function ElementsToParseStorage() {
this.elementsToParseMapIndex = -1;
this.elementsToParse = {};
/**
* Get element by index and remove it from the collection
*
* @param index - index of the element in the collection
* @return element at the specified index
*/
this.getElement = function(index) {
var element = this.elementsToParse[index];
delete this.elementsToParse[index];
return element;
};
/**
* Store an element in the collection
*
* @param element - element to store in the collection
* @return index where element was stored
*/
this.setElement = function(element) {
++this.elementsToParseMapIndex;
this.elementsToParse[this.elementsToParseMapIndex] = element;
return this.elementsToParseMapIndex;
};
}
/**
* @brief Object that stores html tags that we want to ignore.
* NOTE: Items in this list should be sorted array because we use binary search.
*/
var ElementsFilter = {
// DOM elements to ignore
elementsToIgnore : [ "A", "ACRONYM", "APPLET", "AREA", "AUDIO",
"BUTTON", "CANVAS", "CODE",
"COL", "COLGROUP", "COMMAND",
"DATALIST", "DEL", "DIR",
"EMBED", "FRAME", "FRAMESET",
"IFRAME", "IMG", "INPUT",
"KBD", "KEYGEN", "LABEL", "LINK",
"MAP", "MENU", "META", "METER",
"NAV", "NOFRAMES", "NOSCRIPT",
"OBJECT", "OPTGROUP", "OPTION", "OUTPUT",
"PARAM", "PROGRESS", "S", "SAMP",
"SCRIPT", "SELECT", "SOURCE", "STRIKE",
"STYLE", "TEXTAREA", "TIME",
"TRACK", "VAR", "VIDEO"],
/**
* Determine if an element on the ignore list
*
* @param element - DOM element to check against the list of elements to be ignored
* @return true if it is on the ignore list else false
*/
isOnIgnoreList : function(element) {
var result = false;
var elementName = element.nodeName;
var lowWord = 0;
var highWord = this.elementsToIgnore.length - 1;
var current = 0;
while (lowWord <= highWord) {
current = Math.floor((lowWord + highWord) / 2);
if (this.elementsToIgnore[current] < elementName) {
lowWord = current + 1;
continue;
}
if (this.elementsToIgnore[current] > elementName) {
highWord = current - 1;
continue;
}
result = true;
break;
}
return result;
},
isIgnoredByRule : function(element) {
try {
// Check if element or its parent is editable i.e. has the 'contenteditable' or 'g_editable' attribute set to true
// Google sites on Firefox sometimes use only 'g_editable' (custom attribute) instead of 'contenteditable'
var editableElements = $(element).closest("div[contenteditable='true'],div[g_editable='true'],body[contenteditable='true'],body[g_editable='true']");
if(editableElements.length > 0) {
Log("Skip editable element");
return true;
}
// TBAR-9045: Numbers in the suggestion list on a yahoo search page get highlighted
if(pageUrlHostName.indexOf("yahoo.") != -1) {
var parentElem = element.parentElement;
if(parentElem) {
parentElem = parentElem.parentElement;
if(parentElem) {
parentElem = parentElem.parentElement;
if(parentElem && parentElem.getAttribute("class") === "sa-results") {
Log("Ignoring element on yahoo search suggestion box");
return true;
}
}
}
}
// TBAR-9260: Livejournal - Weird highlighting in edit mode
if(pageUrlHostName.indexOf("livejournal.") != -1) {
var elementsFound = $(element).closest("div.b-spelling-faketextarea");
if(elementsFound.length > 0) {
Log("Ignoring element on livejournal");
return true;
}
}
//
// Rules that apply only to Firefox
//
if(getPluginName() === "FFTB") {
// TBAR-9222: Facebook. Phone numbers are highlighted in edit field.
if(pageUrlHostName.indexOf("facebook.") != -1) {
if(getDocument().body.className === "mceContentBody ") {
Log("Ignoring facebook in edit mode");
return true;
}
}
// TBAR-10221 zoho.com highlighting in new email.
if(pageUrlHostName.indexOf("zoho.") != -1) {
if(getDocument().body.className === "ze_body") {
Log("Ignoring zoho in edit mode");
return true;
}
}
}
}
catch(e) {
Log("Exception while trying to check ignored rules: " + e.message);
}
return false;
},
isExistingHighlighting : function(element) {
if (!element) {
return false;
}
return (element.className.indexOf("skype_c2c") != -1);
}
}
/**
* Processes results returned by PNR
*
* @param results - JSON string containing results
*/
function processPNRResults(results) {
LogTimestamp("Receive response from PNR service");
Log("Processing PNR results");
var jsonResult = JSON.parse(results);
// Get and remove element
var element = elementsStorage.getElement(jsonResult.id);
if (jsonResult.pnrResults.length === 0) {
Log("No phone numbers found");
return;
}
Log("PNR parse results: " + results);
// Some results might arrive after user has disabled highlighting
// so make sure we just ignore those
if(!highlightingEnabled) {
Log("Ignoring parse results because highlighting is disabled");
return;
}
LogTimestamp("Start highlighting");
// Unregister mutation events while we are making
// changes to the DOM so that they don't trigger for the changes we make
unregisterMutationObserver();
initHighlighting();
// Highlight the numbers
var highlightedNumbers;
highlightedNumbers = doHighlighting(element, jsonResult.pnrResults);
registerMutationObserver();
LogTimestamp("End highlighting");
// Send the detected numbers to the free PNR web service to find free numbers
FPNR.findFreeNumbers(highlightedNumbers, pageUrlHostName, processFPNRResults);
Log("Parse results processed successfully");
}
/**
* Triggered by mutation summary library when there are dynamic changes
* to the DOM and provides a summarized list of added, removed and changed
* nodes.
*
* @param summaries - List of summarized changes to the DOM
*/
function processMutations(summaries) {
Log("Received DOM mutations");
parseContent(summaries[0].added);
}
/**
* This is a callback that is called when FPNR request is done.
*
* @param response - Array of numbers that are free
*/
function processFPNRResults(response) {
LogTimestamp("Receive response from FPNR service");
// FPNR might have returned an error
if (response === null) {
Log("FPNR service returned an error");
return;
}
// Some results might arrive after user has disabled highlighting
// so make sure we just ignore those
if (!highlightingEnabled) {
Log("Ignoring Free PNR results because highlighting is disabled");
return;
}
Log("Free PNR response: " + response);
var len = response.length;
if(len === 0) {
return;
}
LogTimestamp("Start FREE highlighting");
// Unregister mutation events while we are making
// changes to the DOM so that they don't trigger for the changes we make
unregisterMutationObserver();
for (var i = 0; i < len; i++) {
SkypeClick2Call.NumberHighlightingBuilder.markAsFree('+' + response
, localizedPhrases.FREE);
}
registerMutationObserver();
LogTimestamp("End FREE highlighting");
}
/**
* Initialize highlighting by injecting necessary bits into the DOM
*/
function initHighlighting() {
SkypeClick2Call.NumberHighlightingBuilder.injectPrintStyle();
SkypeClick2Call.MenuInjectionBuilder.createInjectionElements(SkypeClick2Call.uiId == 1 ? localizedPhrases.CALL_VIA_SKYPE : localizedPhrases.CALL,
localizedPhrases.SEND_SMS,
localizedPhrases.ADD_TO_SKYPE,
localizedPhrases.CALL_WITH_SKYPE_CREDITS,
SkypeClick2Call.uiId == 1 ? localizedPhrases.NO_CREDIT_REQUIRED : localizedPhrases.FREE_VIA_SKYPE);
}
/**
* Highlights numbers found on the page
*
* @param element - DOM element where numbers were found
* @param pnrResults - Parse results from PNR
*/
function doHighlighting(element, pnrResults) {
return SkypeClick2Call.NumberHighlightingBuilder.createInjectionElements(element, pnrResults);
}
/**
* Removes all highlighting
*/
function removeHighlighting() {
Log("Removing any existing highlighting");
SkypeClick2Call.NumberHighlightingBuilder.destroyPrintStyle();
SkypeClick2Call.NumberHighlightingBuilder.destroyInjectionElements();
SkypeClick2Call.MenuInjectionBuilder.destroyInjectionElements();
}
/**
* Sends the HTML content of the specified element to PNR to look for phone numbers
*
* @param element - DOM element to search for phone numbers
*/
function parseContent(elements) {
elements.forEach(function(element) {
// Check if the element is one we should ignore
if (ElementsFilter.isOnIgnoreList(element)) {
Log("Skip parsing ignored element " + element.nodeName);
return;
}
// Skip elements with inner HTML length <= MIN_PARSE_LEN
var htmlLen = element.innerHTML.length;
if(htmlLen <= MIN_PARSE_LEN) {
Log("Skip parsing element " + element.nodeName + " with inner HTML length <= MIN_PARSE_LEN");
return;
}
// Truncate the HTML in case its too big
var htmlToParse;
if(htmlLen > MAX_PARSE_LEN) {
Log("Truncating HTML");
htmlToParse = element.innerHTML.substr(0, MAX_PARSE_LEN - 1);
}
else {
htmlToParse = element.innerHTML;
}
PNR.findNumbers(elementsStorage.setElement(element).toString(), pageLanguage, pageUrl, htmlToParse, processPNRResults);
});
}
/**
* Starts tracking dynamic changes to the page (DOM)
*/
function registerMutationObserver() {
Log("Registering mutation observer");
// If mutation observer already exists then enable it
if (mutationObserver) {
if (mutationObserverActive === false) {
mutationObserver.reconnect();
}
}
else {
// Register for DOM mutation events
mutationObserver = new MutationSummary({
callback: processMutations,
queries: [{element: '*'}]
});
}
mutationObserverActive = true;
}
/**
* Stops tracking dynamic changes to the page (DOM)
*/
function unregisterMutationObserver() {
Log("Unregistering mutation observer");
if(mutationObserver && mutationObserverActive) {
mutationObserver.disconnect();
mutationObserverActive = false;
}
}
/*
* Checks if the meta tag used to disable highlighting is present
* @return true if meta tag used to disable highlighting is found else false
*/
function isOffByMetaTag() {
// Look if the following meta tag exists within the <head> element
// <meta name="SKYPE_TOOLBAR" content="SKYPE_TOOLBAR_PARSER_COMPATIBLE" />
var meta = $('head').children('meta[name][content]').filter(function() {
return ((this.name.toLowerCase() === "skype_toolbar") && (this.content.toLowerCase() === "skype_toolbar_parser_compatible"));
});
if (meta.length > 0) {
Log("Highlighting disabled by meta tag");
return true;
}
return false;
}
/*
* Check if this page is on a URL that is to be skipped for highlighting
* @return true if this page is to be skipped for highlighting else false
*/
function isOffByURL() {
var skipURLs = [
"docs.google.",
".officeapps.live."
];
for(var i = 0; i < skipURLs.length; i++) {
if(pageUrlHostName.indexOf(skipURLs) != -1) {
Log("Highlighting disabled on URL " + skipURLs);
return true;
}
}
return false;
}
/*
* Check if this page is to be skipped for highlighting due to a rule
* @return true if this page is to be skipped for highlighting else false
*/
function isOffByRule() {
// Check if body is editable i.e. has the 'contenteditable' or 'g_editable' attribute set to true
// Google sites on Firefox sometimes use only 'g_editable' (custom attribute) instead of 'contenteditable'
if($("body[contenteditable='true'],body[g_editable='true']").length > 0) {
Log("Highlighting disabled due to editable body");
return true;
}
// TBAR-9281: Phone numbers are highlighted in edit mode for MSDN forum
if(pageUrlHostName.indexOf("social.msdn.microsoft.") != -1) {
var className = $("iframe", parent.document).attr('class');
if(className === "t-content") {
Log("Highlighting disabled on MSDN forum post edit iframe");
return true;
}
}
// TBAR-9428: Number highlighted in Outlook Web App when composing an email
if(pageUrl.indexOf("/owa/") != -1) {
var className = $("iframe", parent.document).attr('class');
if(className === "w100") {
Log("Highlighting disabled on Outlook Web Access email compose iframe");
return true;
}
}
// Number highlighted in Outlook Web App when composing an email signature
if(pageUrl.indexOf("/ecp/") != -1) {
var className = $("iframe", parent.document).attr('class');
if(className === "richTextFrame") {
Log("Highlighting disabled on Outlook Web Access signature compose iframe");
return true;
}
}
return false;
}
/*
* Check if this page is to be skipped for highlighting due to a rule
* @return true if this page is to be skipped for highlighting else false
*/
function skipHighlighting() {
// Check if page is HTML
if(!isHtmlPage()) {
Log("Highlighting disabled on non-html page");
return true;
}
// Check if the page has requested highlighting to be turned off
if(isOffByMetaTag()) {
return true;
}
// Check if the page is on a URL that is to be skipped for highlighting
if(isOffByURL()) {
return true;
}
// Check if this page is to be skipped for highlighting due to a custom rule
if(isOffByRule()) {
return true;
}
return false;
}
/**
* Determine the language of the web page
*/
function getPageLang()
{
// First try to get the 'lang' attribute from the <html> node
var pageLanguage = getDocument().documentElement.getAttribute('lang');
if(!pageLanguage) {
// Look for the language in the meta tag instead
pageLanguage = $('head').children('meta[http-equiv=Content-Language]').attr("content");
if(!pageLanguage) {
pageLanguage = "en"; // Default language
}
}
return pageLanguage;
}
/*
* Determine the host (domain) part of the URL
* @return Host name (domain) of the URL
*/
function getURLHostName() {
var hostName = "";
try {
hostName = getDocument().location.hostname;
if(!hostName) { // Can be null for locally loaded pages and sometimes iframes
hostName = top.window.location.hostname; // Try to get parent window host name (for iframes)
if(!hostName) {
hostName = "";
}
}
}
catch(e) {
Log("Exception while trying to get URL host name: " + e.message);
hostName = "";
}
return hostName.toLowerCase();
}
/**
* Invoked when the background page sends us settings
*/
function processSettingsResponse(message) {
Log("Highlighting settings have been received as: " + message.switchState);
if(message.switchState === true && !skipHighlighting()) {
// Highlighting is on
highlightingEnabled = true;
// Set the fingerprint and the dataRV endpoint for metrics reporting
SkypeClick2Call.fingerPrint = message.fingerPrint;
SkypeClick2Call.metricsUrl = message.metricsUrl;
SkypeClick2Call.uiId = message.uiId;
SkypeClick2Call.NumberHighlightingBuilder.initialize();
var htmlBody = new Array();
htmlBody.push(getDocument().body);
// Send the page for phone number parsing to PNR
parseContent(htmlBody);
// Look out for dynamic changes to the page
registerMutationObserver();
}
else {
// Highlighting is off
highlightingEnabled = false;
// No need to track dynamic changes to the page
unregisterMutationObserver();
// Remove all highlighting from the page
removeHighlighting();
}
}
/**
* Starts our operations
*/
function main() {
LogTimestamp("Plugin invoked");
// Load the language specific resources
languageforUI = loadLocalizedResources();
Log("UI language: " + languageforUI);
// Get the language of the page
pageLanguage = getPageLang();
Log("Page language: " + pageLanguage);
// Get the URL of the page
pageUrl = getDocument().location.href;
Log("Page URL: " + pageUrl);
// Get the host name (domain) part of the URL
pageUrlHostName = getURLHostName();
Log("Page URL host name: " + pageUrlHostName);
// Ask the background page for our settings
postSettingsRequest();
}
var MAX_PARSE_LEN = 2097152; // 2 MB
var MIN_PARSE_LEN = 6;
var highlightingEnabled = false;
var languageforUI = "en";
var pageLanguage = "en";
var pageUrl = "";
var pageUrlHostName = "";
var mutationObserver = null;
var mutationObserverActive = false;
var elementsStorage = new ElementsToParseStorage();
Log("Content script loaded");
main();
****************** debug (...datat/fprn.js :
'use strict';
// Create namespace
if (!window.FPNR) {
window.FPNR = {};
}
/**
* Removes duplicate numbers from the array and removes the plus from the
* numbers because the Free PNR web service needs numbers without the plus.
* @param numbers - Array of numbers modify
*/
FPNR.removeDuplicatesAndPlus = function(numbers) {
var result = {};
numbers.sort().reverse();
// Drop duplicates
result.uniqueNumbers = numbers.filter(function(elem, pos, self) {
return self.indexOf(elem) == pos;
});
// Remove leading "+"
result.uniqueNumbers = result.uniqueNumbers.map(function(elem) {
return elem.substr(1);
});
return result;
}
/**
* Fills json request object for to FPNR service
* @param requestData - Needed request data
* @return filled request ibject
*/
FPNR.generateRequest = function(requestData) {
var request = {
"fp": SkypeClick2Call.fingerPrint,
"l" : languageforUI,
"v" : getPluginName() + "/" + getProductVersion(),
"dn": requestData.pageFqdn,
"uiid": SkypeClick2Call.uiId.toString(),
"q" : {
"phone_numbers" : requestData.uniqueNumbers
}
}
return JSON.stringify(request);
}
/**
* Finds free phone numbers by querying the Free PNR web service.
* On failure it calls the callback with an empty array as the request and -1 as response.
* On success it calls the callback with the array of numbers sent to FPNR and the response from the FPNR server.
* @param numbers - Array of numbers to check
* @param pageFqdn - Domain name for page asking
* @param callbackForFPNRResponse - Callback function to be called with the FPNR response
*/
FPNR.findFreeNumbers = function(numbers, pageFqdn, callbackForFPNRResponse) {
Log("Find free numbers: " + numbers);
if(numbers.length === 0) {
return;
}
// Remove duplicate numbers and strip the numbers of the + sign because the Free PNR web service needs it that way
var requestData = FPNR.removeDuplicatesAndPlus(numbers);
requestData.pageFqdn = pageFqdn;
if(requestData.pageFqdn.length === 0) {
requestData.pageFqdn = "unknown";
}
requestData.callbackForFPNRResponse = callbackForFPNRResponse;
// Callback function when the AJAX response is ready
requestData.processFPNRResponse = function(response) {
if (!response || !response.r || !response.r.phone_numbers) {
requestData.callbackForFPNRResponse(null);
return;
}
var freeMumbers = [];
for (var number in response.r.phone_numbers) {
var numberData = response.r.phone_numbers[number];
if (numberData.f) {
freeMumbers.push(number);
}
}
requestData.callbackForFPNRResponse(freeMumbers);
}
LogTimestamp("Send request to FPNR service");
$.ajax({
type: "POST",
dataType: "json",
url: "pnrws.NotAllowedScript68164cdc22204skype.com/api/v2/directory",
contentType: "application/json",
data: FPNR.generateRequest(requestData),
success: requestData.processFPNRResponse,
error: function (a, b, c) {
requestData.processFPNRResponse(null);
}
});
Log("Free PNR request sent");
}