2015-07-21 93 views
-1

我試圖從Safari Safari擴展中的設置中將變量傳遞給注入的JavaScript。我設法讓消息通過,但不知道如何使用handleMessage作用域的變量,所以我可以在我的注入文件中使用它。 handleMessage函數中的變量printerNAME似乎無法在函數外部訪問?注入腳本的Safari擴展設置

global.html

safari.application.addEventListener('message', handleMessage, false); 

function handleMessage(msg) { 
    if(msg.name === 'printerName') { 
     alert(msg.message); 
    } 
    var printerName = safari.extension.settings.printerName; 
    safari.application.activeBrowserWindow.activeTab.page.dispatchMessage('printerName', printerName); 
} 

injected.js

var printerNAME; 

function handleMessage(msg) { 
    if(msg.name === 'printerName') { 
     printerNAME = msg.message; 
    } 
} 

if (window.top === window) { 
    safari.self.addEventListener('message', handleMessage, false); 
    safari.self.tab.dispatchMessage('printerName', printerNAME); 

    alert(printerNAME); 
} 

回答

0

消息傳遞是異步的。這意味着只要注入的腳本發送一條消息到全局頁面,它就會繼續執行下一行代碼,而不會等待響應(如果有)。因此,任何依賴於響應的代碼必須在收到響應後才執行。因此,您的alert(printerNAME)聲明應該進入handleMessage函數。

相關問題