commit ead633ed84a2d9b7fb79114713d298a09dfc0f2e
parent e1e21a4f3948ba84da66ee6a8c96113ccec9a4f4
Author: Simon Kornblith <simon@simonster.com>
Date: Thu, 1 Sep 2011 17:19:23 +0000
IE support works (in standards mode)
Diffstat:
2 files changed, 38 insertions(+), 21 deletions(-)
diff --git a/chrome/content/zotero/xpcom/connector/connector.js b/chrome/content/zotero/xpcom/connector/connector.js
@@ -40,23 +40,41 @@ Zotero.Connector = new function() {
if(Zotero.isBookmarklet && this.isOnline !== null) callback(this.isOnline);
if(Zotero.isIE) {
- var listener = function(event) {
- if(event.origin === "http://www.zotero.org" && event.data === "ZOTERO_IE_STANDALONE_LOADED false") {
- callback(false);
- } else if(event.origin === "http://127.0.0.1:23119" && event.data === "ZOTERO_IE_STANDALONE_LOADED true") {
- _ieStandaloneIframeTarget = event.source;
- callback(true);
- } else {
- return;
- }
- window.removeEventListener("message", listener, false);
- };
- window.addEventListener("message", listener, false);
-
+ if(window.location.protocol !== "http:") {
+ this.isOnline = false;
+ callback(false);
+ return;
+ }
+
Zotero.debug("Connector: Trying IE hack");
- var s = document.createElement("iframe");
- s.src = "http://www.zotero.org/bookmarklet/ie_hack.html";
- (document.body ? document.body : document.documentElement).appendChild(s);
+ try {
+ var xdr = new XDomainRequest();
+ xdr.open("POST", "http://127.0.0.1:23119/connector/ping", true);
+ xdr.onerror = xdr.ontimeout = function() {
+ this.isOnline = false;
+ callback(false);
+ };
+ xdr.onload = function() {
+ var listener = function(event) {
+ if(event.origin === "http://127.0.0.1:23119" && event.data === "ZOTERO_IE_STANDALONE_LOADED true") {
+ this.isOnline = true;
+ window.removeEventListener("message", listener, false);
+ _ieStandaloneIframeTarget = iframe.contentWindow;
+ callback(true);
+ }
+ };
+ window.addEventListener("message", listener, false);
+
+ var iframe = document.createElement("iframe");
+ iframe.src = "http://127.0.0.1:23119/connector/ieHack";
+ document.documentElement.appendChild(iframe);
+ };
+ xdr.send("");
+ } catch(e) {
+ Zotero.logError(e);
+ this.isOnline = false;
+ callback(false);
+ }
} else {
Zotero.Connector.callMethod("ping", {}, function(status) {
callback(status !== false);
@@ -129,7 +147,7 @@ Zotero.Connector = new function() {
var uri = CONNECTOR_URI+"connector/"+method;
if(Zotero.isIE) { // IE requires XDR for CORS
- if(_ieStandaloneIframeTarget) {
+ if(_ieStandaloneIframeTarget !== undefined) {
var requestID = Zotero.Utilities.randomString();
var listener = function(event) {
@@ -142,15 +160,15 @@ Zotero.Connector = new function() {
var xhrSurrogate = {
"status":data[1][1],
"responseText":data[1][2],
- "getResponseHeader":function(x) { return data[1][3][x] }
+ "getResponseHeader":function(x) { return data[1][3][x.toLowerCase()] }
};
newCallback(xhrSurrogate);
}
};
window.addEventListener("message", listener, false);
- _ieStandaloneIframeTarget.postMessage(IE_HACK_MSG+" "+JSON.stringify(["connectorRequest",
- [requestID, method, JSON.stringify(data)]]));
+ _ieStandaloneIframeTarget.postMessage(IE_HACK_MSG+JSON.stringify(["connectorRequest",
+ [requestID, method, JSON.stringify(data)]]), "http://127.0.0.1:23119/connector/ieHack");
} else {
Zotero.debug("Connector: No iframe target; not sending to Standalone");
callback(false, 0);
diff --git a/chrome/content/zotero/xpcom/server.js b/chrome/content/zotero/xpcom/server.js
@@ -311,7 +311,6 @@ Zotero.Server.DataListener.prototype._generateResponse = function(status, conten
} else {
response += "Content-Length: 0\r\n\r\n";
}
- Zotero.debug(response);
return response;
}