Javascript - onload event
Javascript - onload event
当我打开新的选项卡而不切换到它们时,我遇到了onload
事件的问题。
我正试图为Chrome编写一个用户脚本,在pre
标签后添加"复制"按钮。当我试图加载的页面是焦点时,它工作正常,但当我在后台打开一个新选项卡时,它不工作。
这个行为是预期的吗?
下面是我的代码:
// ==UserScript==
// @author Vamsi Krishna | vamsi_ism@outlook.com
// @description Adds a copy button after 'pre' tags.
// @grant none
// @homepage https://github.com/krikx/CopyCode
// @match *://*/*
// @name CopyCode
// @version 0.1
// ==/UserScript==
var css = "/* google fonts */ @import url(https://fonts.googleapis.com/css?family=Open+Sans); .kxbt { border-radius: 4px; cursor: pointer; display: inline-block; font-family: 'Open Sans', 'sans-serif'; font-size: 15px; margin-bottom: 5px; padding: 5px; padding-top: 3px; transition: .2s; } .blue { color: #55acee; border: 1px #55acee solid; } .blue:hover { background-color: #55acee; color: #fff; } .green { color: #2ecc71; border: 1px #2ecc71 solid; } .green:hover { color: #fff; background-color: #2ecc71; } .red { color: #e74c3c; border: 1px #e74c3c solid; } .red:hover { color: #fff; background-color: #e74c3c; } /* green and red are almost never used as timeout is too fast to observe any noticible difference */";
var style = document.createElement('style');
style.innerHTML = css;
document.getElementsByTagName('head')[0].appendChild(style);
function Init(){
var blocks = document.getElementsByTagName('pre');
for (var id = 0; id < blocks.length; id++){
var btn = document.createElement('div');
btn.innerText = 'Copy';
btn.setAttribute('class', 'kxbt blue');
InsertAfter(blocks[id], btn);
}
}
function InsertAfter(refNode, newNode){
refNode.parentNode.insertBefore(newNode, refNode.nextSibling);
WireClick(newNode, refNode); // add the click funtionality
}
function WireClick(btn, block){
btn.addEventListener('click', function(){
Copy(btn, block);
});
}
function Copy(btn, block){
var range = document.createRange();
range.selectNode(block);
var sel = getSelection();
sel.removeAllRanges(); // TODO | removing selection without backup
sel.addRange(range);
var success = document.execCommand('copy');
sel.removeAllRanges(); // possible TODO
var msg = success ? 'Copied!' : 'Error!';
var tcls = success ? 'kxbt green' : 'kxbt red';
btn.innerText = msg;
btn.setAttribute('class', tcls);
setTimeout( // revert back to blue in 256ms
function(btn){
btn.innerText = 'Copy';
btn.setAttribute('class', 'kxbt blue');
},
256, btn
)
}
function main(){
var body = document.getElementsByTagName('body')[0];
// do not inject twice
if (body.hasAttribute('data-kxbt-inited')){
return;
}
body.setAttribute('data-kxbt-inited', true);
Init();
}
// wait until ready
window.addEventListener('load', main);
Adblock Plus可能是问题的原因。
禁用并重新启用ABP后工作正常。
由于我仍然不知道问题的原因,也不知道为什么(显然)禁用/重新启用ABP解决了问题,如果有人能帮助的话,那就太好了。
相关文章:
- issue with FB.Event.subscribe
- Angularjs :$routeChangeStart event
- window.onload没有'无法在Android WebView中工作
- event.prventDefault()持续多久
- JavaScript-动态SVG-onload属性-未触发事件
- 在phonegap中为android调用onload函数的最佳方式
- image.onload事件和浏览器缓存
- 将函数从onclick修改为onload
- Combine onload, onresize and onclick
- onLoad function phonegap android
- 任何一种简单的方法都可以将带有onload的元素作为目标
- <text区域>在我的html中包含event.keycode==13之后,wrap就不起作用了
- 如何调用表td标记内的Onload函数
- IE中的Onload()处理程序没有响应
- iFrame onload JavaScript event
- jQuery image.onload phantom event firing
- Javascript - onload event
- Dojo and the onload event
- ASP.NET: UpdatePanel & OnLoad Event
- Body Onload Event