如果事件監聽器是在網頁的上下文中定義的(但不是在內容腳本上),則從內容觸發的'mouseenter'
將不會被處理。發生這種情況是因爲內容腳本生活在isolated world中。
要實現正確的觸發,您需要將JavaScript直接插入到網頁上下文中。您有以下選擇:
選項1:簡單的用內聯JavaScript
插入代碼爲<script></script>
標籤,並把它添加到文檔:
var script = "$('*').each(function(i, entity){\
console.log(entity);\
$(entity).trigger('mouseenter');\
});";
var scriptElement = document.createElement("script");
scriptElement.innerHTML = script;
document.head.appendChild(scriptElement);
方案2:通過Web訪問JavaScript文件
當注入的腳本有很多代碼時,此方法非常有用。
用以下內容創建的擴展根目錄中的文件,例如inject.js
:
$('*').each(function(i, entity){
console.log(entity);
$(entity).trigger('mouseenter');
});
修改manifest.json
使其web accessible:
{
"web_accessible_resources": ["inject.js"]
}
而且在內容腳本創建<script/>
標記,參考inject.js
:
var scriptElement = document.createElement("script");
scriptElement.setAttribute('src', chrome.runtime.getURL('inject.js'));
document.head.appendChild(scriptElement);
我正努力讓這個工作。我的代碼在作爲書籤運行時起作用,但是作爲通過內容腳本添加到網頁的腳本標記,它可以將東西記錄到控制檯,但是我的dispatchEvent調用不會執行任何操作。 還有什麼我失蹤? – Cole