我寫了一個GreaseMonkey腳本來爲blogger.com的HTML視圖添加一個按鈕。我有警報到處,所以我知道一切都在運行。腳本觸發但沒有結果
奇怪的是,它發射兩次,每次都略有不同。 當我導航到blogger.com帖子編輯時,腳本首先在黑色頁面上觸發,並以正確的順序(包括「內部」順序)遍歷所有警報。
在頁面加載後的第二次運行中,除「內部」之外的每個警報都會運行並且不會產生錯誤。
// ==UserScript==
// @name Blogger: Remove HTML Space
// @include http://www.blogger.com/blogger.g?blogID*editor/target*\
// ==/UserScript=
function contentEval(source) {
// Check for function input.
alert("asdas");
if ('function' == typeof source) {
// Execute this function with no arguments, by adding parentheses.
// One set around the function, required for valid syntax, and a
// second empty set calls the surrounded function.
source = '(' + source + ')();'
}
alert("asdas2");
// Create a script node holding this source code.
var script = document.createElement('script');
alert("asdas3");
script.setAttribute("type", "application/javascript");
alert("asdas4");
script.textContent = source;
alert("asdas5");
// Insert the script node into the page, so it will run, and immediately
// remove it to clean up.
alert("asdas6");
document.body.appendChild(script);
alert("asdas7");
}
alert("test")
contentEval(function(){ alert("inside"); document.getElementById("postingHtmlToolbar").firstChild.innerHTML += '<div id="SP" class="goog-inline-block goog-toolbar-button" title="SP" role="button" style="-moz-user-select: none;"><div class="goog-inline-block goog-toolbar-button-outer-box"><div class="goog-inline-block goog-toolbar-button-inner-box"><button type="button" onclick="document.getElementById(\'postingHtmlBox\').value = document.getElementById(\'postingHtmlBox\').value.replace(/&nbsp;/g, \' \');"><b>SP</b></button></div></div></div>'});
alert("testw");
blogger.com是否有反腳本注入的東西?
有趣的是,如果我的腳本爲什麼沒有做它應該做的事情,我還是不知道。 總而言之,我不關心腳本最終是否會觸發100次。 您是否認爲問題可能只是由於多次運行而發生? – Jonathon
我之前並沒有在腳本中詳細看過,請查看編輯內容,準確地說出發生了什麼以及發生了什麼。問題是追加HTML或點擊按鈕? 'document.getElementById(「postingHtmlToolbar」)。firstChild.innerHTML + =「FOO」'工作嗎? 關於多次發射,我認爲每次執行都在單獨的頁面上下文中,所以它們不應該互相影響(但我不完全確定)。 –
@edit:我不認爲greasemonkey可以做這樣的事情,它不能直接編輯頁面。 不要問我爲什麼通用汽車公司不能以簡單的方式來運行你100%信任的代碼,但出於安全原因,我不明白他們限制你可以做的事情。 – Jonathon