console.warn("No document.documentElement exist, Hatch cannot open");
}
-/**
- * Open a port to our extension.
- */
-var port = chrome.runtime.connect();
+var port;
-/**
- * Relay all messages received from the extension back to the tab
- */
-port.onMessage.addListener(function(message) {
- window.postMessage(message, location.origin);
-});
+function setup() {
+ console.debug("Content script setting up a new connection");
+ /**
+ * Open a port to our extension.
+ */
+ port = chrome.runtime.connect();
-/**
- * Receive messages from the browser tab and relay them to the
- * Hatch extension script.
- */
-window.addEventListener("message", function(event) {
+ port.onDisconnect.addListener(function(event) {
+ console.log('Extension port disconnected..', event);
+ });
+
+ /**
+ * Relay all messages received from the extension back to the tab
+ */
+ port.onMessage.addListener(function(message) {
+ window.postMessage(message, location.origin);
+ });
- // We only accept messages from ourselves
- if (event.source != window) return;
- var message = event.data;
+ /**
+ * Receive messages from the browser tab and relay them to the
+ * Hatch extension script.
+ */
+ window.addEventListener("message", function(event) {
- // Ignore broadcast messages. We only care about messages
- // received from our browser tab/page.
- if (message.from != 'page') return;
+ // We only accept messages from ourselves
+ if (event.source != window) return;
- // standard Hatch-bound message; relay to extension.
- port.postMessage(message);
+ var message = event.data;
-}, false);
+ // Ignore broadcast messages. We only care about messages
+ // received from our browser tab/page.
+ if (message.from != 'page') return;
+
+ // standard Hatch-bound message; relay to extension.
+ try {
+ port.postMessage(message);
+ } catch (e) {
+ console.error("Port communication failed. Reconnecting", e);
+ setTimeout(setup);
+ }
+
+ }, false);
+}
+setup();