2015-06-03 26 views
0

我正嘗試使用Chrome擴展程序中的Netflix電影頁創建一個javascript alert(),其中的innerHTML爲<p class="synopsis">...</p>在Chrome擴展程序中使用另一個網站的innerHTML創建變量

這是我background.js

window.onload = function() { 

chrome.browserAction.onClicked.addListener(function(tab) { 

    var synopsis = document.getElementsByClassName("synopsis").innerhtml; 
    alert(synopsis); 
}); 

} 

這是我的manifest.json:

{ 
    "name": "Get Synopsis", 
    "version": "1.0.0", 
    "description": "Get synopsis", 
    "manifest_version": 2, 

    "browser_action": { 
     "default_icon": "icon.png" 
    }, 

    "permissions":[ "tabs", "*://www.netflix.com/*" ], 
    "background": { 
     "scripts": ["background.js"] 
    } 
} 

任何人都可以指出我在做什麼錯?我似乎無法找到錯誤。

回答

2

我可能是錯的,但我相信getElementsByClassName返回一個數組或至少某種元素列表,因此innerHTML將不可用。另外,我很確定這是innerHTML(而不是innerhtml)。這兩個錯誤都應該顯示在控制檯中。

編輯:因爲它是一個數組,所以您需要先選擇數組中的元素,然後,然後使用innerHTML。所以,如果你想例如第一個元素與指定的類,你會做...getElementsByClassName('foo')[0].innerHTML

+0

非常感謝您的快速回答。我做了你和fsacer建議的更改,但現在CONSOL告訴我innerHTML是「未定義」的。我檢查了頁面的源代碼,頁面上肯定只有一個'class ='synposis''。任何想法可能導致這一點? – JSW189

0

document.getElementsByClassName()返回數組所以你必須使用索引像這樣訪問元素:

document.addEventListener("DOMContentLoaded", function() { 

chrome.browserAction.onClicked.addListener(function(tab) { 

    var synopsis = document.getElementsByClassName("synopsis")[0].innerHTML; 
    alert(synopsis); 
}); 

}); 

編輯:校正事件。

+0

我試過了你的答案,並且它返回了這個錯誤:'browserAction.onClicked的事件處理程序錯誤:TypeError:無法讀取在chrome-extension中未定義的屬性'innerHTML'://.../background.js:5:66handler @ extensions :: uncaught_exception_handler:8' – JSW189

+0

問題是你不能在window.onload上做這件事,因爲DOM沒有準備好。 – fsacer

+0

我不知道我明白。 'window.onload'是否指示腳本等待DOM準備好? – JSW189

0

現有答案指向代碼中的實際錯誤,但真正的主要問題是您應該查看有關Chrome擴展的體系結構的文檔。

特別是,文檔不是指背景頁面上活動選項卡的文檔。

相反,您可以使用內容腳本並從彈出代碼(不是背景)發送消息到活動選項卡以詢問摘要。

還有一種方法可以直接從後臺獲取活動選項卡html,但是我搜索了所有權限,除了使用內容腳本外,沒有看到任何其他的權限。 https://developer.chrome.com/extensions/declare_permissions

相關問題