A content script can only communicate with the global page via message passing.
content.js
safari.self.addEventListener('message', handleMessage, false);
// Send a message to the global page
safari.self.tab.dispatchMessage('requestVariables');
// Receive a message back from the global page
function handleMessage(msg) {
if (msg.name === 'returnVariables') {
console.log(msg.message);
}
}
global.js
safari.application.addEventListener('message', handleMessage, false);
// Receive a message from the injected script
function handleMessage(msg) {
if (msg.name === 'requestVariables') {
var message = {prop: 'val'};
safari.application.activeBrowserWindow.activeTab.page.dispatchMessage('returnVariables', message);
}
}