2012-03-20 48 views
1

我正在使用HTML5 Sever發送事件來發布服務器的某些狀態。我正在實施Chrome擴展程序來跟蹤狀態,並在需要時通知用戶。當擴展名chrome使用「EventSrouce」初始化時出現「SECURITY_ERR:DOM Exception 18」

但是當我試圖創建的EventSource對象 鉻拋出異常「未捕獲的錯誤:SECURITY_ERR:DOM異常18」

var tracker = (function(url) { 
    var source = new EventSource(url); 
    var onMessage = function(e) { 
     console.log(e); 
    } 

    source.addEventListener('new', onMessage); 

    return { 
     source: source, 
     newMessage: onMessage 
    }; 
})('http://localhost:3000/dispatching'); 

而且我也增加了服務器的URL到我的分機權限:

"permissions": [ 
    "http://localhost:3000/", 
    "tabs" 
] 

但是權限並沒有真正解決問題! 有什麼想法?

+0

您的網頁託管在哪個網址?這是不同的端口嗎? – 2012-03-20 10:04:50

+0

我不確定它們如何處理端口,但[匹配模式](http://code.google.com/chrome/extensions/match_patterns.html)應該是「http:// localhost:3000/*'in爲了工作。 **然而**,我不相信這個權限甚至是需要調用在本地機器上運行的進程(參見[這個問題])(http://stackoverflow.com/questions/9615089/how-adobe-shadow- chrome-extension-be-able-to-catch-dom-changes-without-any-relev)),所以我認爲問題可能在於你的代碼。不幸的是,我對這個新的API還不太瞭解,所以不能真正幫到那裏。 – Alasdair 2012-03-20 10:44:20

回答

1

這看起來像是Same Origin Policy問題發生在通過file://協議加載的HTML文件中,該協議試圖通過http://協議聯繫服務器。

這裏是an article描述如何繞過您的開發環境的SOP。

當您投入生產時,我的理解是Google Chrome提供了某些方法來繞過通常強加給瀏覽器的通常的SOP限制。這可能是通過你提到的permissions JSON來實現的,但是我對Chrome擴展並不太熟悉。

啊,堅持下去,this article可能會有用。