我有一个Greasemonkey脚本,在Firefox和Opera中运行得很好。 但是,我努力在Chrome中使用它。 问题是注入一个函数到页面中的代码可以调用的页面。 以下是我到目前为止所做的: 首先,我得到了Firefox的unsafeWindow的帮助参考。 这使我有相同的FF和Opera代码(和Chrome,我想)。 var uw = (this.unsafeWindow) ? this.unsafeWindow : window; 接下来,我向页面中注入一个函数。 它实际上只是一个非常薄的包装器,除了在我的GM脚本的上下文中调用相应的函数外,什么也不做: uw.setConfigOption = function(newValue) { setTimeout(setConfigOption, 0, newValue); } 然后,在我的脚本中有相应的function: setConfigOption = function(newValue) { // do something with it, eg store in localStorage } 最后,我用一个链接来调用函数,将一些HTML注入到页面中。 var p = document.createElement('p'); p.innerHTML = '<a href="javascript:setConfigOption(1)">set config option to 1</a>'; document.getElementById('injection-point').appendChild(p); 总结一下:在Firefox中,当用户点击注入的链接时,它会在unsafeWindow上执行函数调用,然后触发一个超时,在我的GM脚本的上下文中调用相应的函数,然后进行实际的处理。 (如果我在这里错了,请纠正我) […]
我想用一个用户脚本加载一个共享的worker。 问题是用户脚本是免费的,并没有托pipe文件的商业模式 – 我也不想使用服务器,甚至是免费的服务器托pipe一个小文件。 无论如何, 我试了一下 ,我(当然)得到一个同样的来源政策错误: Uncaught SecurityError: Failed to construct 'SharedWorker': Script at 'https://cdn.rawgit.com/viziionary/Nacho-Bot/master/webworker.js' cannot be accessed from origin 'http://stackoverflow.com'. 还有另一种方法来加载一个networking工作者通过转换工作人员的function为一个string,然后到一个Blob和加载作为工人,但我也试过: var sharedWorkers = {}; var startSharedWorker = function(workerFunc){ var funcString = workerFunc.toString(); var index = funcString.indexOf('{'); var funcStringClean = funcString.substring(index + 1, funcString.length – 1); var blob = new Blob([funcStringClean], { type: […]
我正在为Firefox和Chrome创build一个UserScript扩展,我正在尝试使用网站JavaScript中的一些代码,例如: function: myFunction(){ return Grooveshark.playNextSong(); } 问题是当我testing这个代码时, Grooveshark是一个空引用。 我知道还有其他人已经做到了: 看BetterGrooveshark 但是我不知道为什么我的简单扩展名不能调用Grooveshark的JavaScript函数。 我需要'追加'我的脚本到文件才能这个工作吗?: document.document.body.appendChild(script); Greasemonkey是否已经注入我的扩展JavaScript? 有人能为我澄清这个请。 谢谢。