我正在使用JQuery在网页的正文选项卡中动态注入脚本标记.我有类似的东西:
function addJS(url) {
$("body").append('<script type="text/javascript" src='+url+'></script>');
}
Run Code Online (Sandbox Code Playgroud)
我以这种方式添加了几个脚本,然后尝试使用它们.EG:
lib.js
function core() {...}
alert("I'am here !");
Run Code Online (Sandbox Code Playgroud)
init.js
addJS("lib.js");
c = new core();
Run Code Online (Sandbox Code Playgroud)
的test.html
<html>
<head>
<title>test</title>
<script type="text/javascript" src="init.js"></script>
</head>
<body>
Hello
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
加载test.html弹出"我在这里"然后最终出现错误"核心未定义".当然合并两个JS文件将使它们完美地工作.
我只是不明白o_O.
编辑
我简化了这个例子,但杰夫回答让我明白这是一个错误.所以这里有一些细节:
当重新加载时,init.js不在test.html的头部,因为我用一个书签上的代码注入了它.
所以真正的执行过程如下:
reload test.html>运行bookmarklet>插入jquery和init.js>插入lib.js
对困惑感到抱歉.
编辑2
现在我有我的问题的解决方案(这很快:-))但我仍然对我的问题的答案感兴趣.为什么会出错?
我正在为服务构建一个bookmarklet.我需要从打开的窗口传输数据(URL,文本),但我不知道哪种方法最好.GET限制了数据量,并且由于跨域问题而无法实现ajax.
什么是最佳方式?
我正在尝试编写一个小油脂猴脚本/书签/您对 Google Docs 有什么帮助。我想添加的功能需要一个 keypress/keyup/keydown 事件处理程序(这三个之一)。不幸的是,Javascript 不是我的强项,而且我似乎无法在编辑窗格中捕获 (?) 按键事件。作为最后的手段,我尝试了以下方法:
javascript:(function(){
els = document.getElementsByTagName("*");
for(i=0;i<els.length;i++){
els[i].onkeypress=function(){alert("hello!");};
els[i].onkeyup=function(){alert("hello2!");};
els[i].onkeydown=function(){alert("hello3!");};
}
})();
Run Code Online (Sandbox Code Playgroud)
但是,这仍然无法在编辑窗格中捕获按键 - 没有烦人的警报(尽管它似乎适用于大多数其他网站......)。我已经检查了 Chrome 和 Firefox(我不能让它在任何一个中工作)。
我在 Firebug 中尝试了“日志事件”(并通过 Firebug 的一个简洁的小扩展,Eventbug 检查了所有注册的事件);似乎这些事件不是在按键上触发的。
编辑:
为了澄清 [Tim],我制作了带有一些注释的屏幕截图...

我正在谈论的“编辑窗格”似乎是一堆显示我输入的内容的 Javascripted div。
有任何想法吗?谢谢!
我希望将这 2 个小书签组合成 1 个小书签,以打开和关闭设计模式:
在:javascript:document.body.contentEditable='true';%20document.designMode='on';%20void%200
离开:javascript:document.body.contentEditable='false';%20document.designMode='off';%20void%200
我尝试了一些 if else 语句,但似乎无法检测 designMode 是否打开。所以不确定我做错了什么。任何帮助,将不胜感激。
我编写了一个简单的书签,只需单击一下即可打开多个网页:
javascript:(function(){window.open("http://www.w3schools.com");window.open("http://www.google.com");window.open("http://www.yahoo.com");})();
Run Code Online (Sandbox Code Playgroud)
我不希望能够打开浏览器并立即单击此按钮,但除非页面已加载到窗口中,否则书签将无法工作。为了提高速度,我更喜欢将浏览器主页设置为“空白”。有没有办法让这个小书签在没有加载页面的情况下执行?
另外,如果确实加载了某些内容,我希望书签能够替换窗口中加载的任何页面。目前,它打开了 3 个新选项卡。我已经在第一个 window.open 上尝试了“name”属性的“_self”和“_parent”值,但它似乎不起作用。我可能没有正确格式化它。
任何帮助表示赞赏!谢谢!
可以在Firefox中使用书签直接保存/打开文件吗?
许多书签打开一个页面,人们可以在该页面上单击链接以下载结果.例如使用blob链接.是否可以避免这种额外的点击并直接调用"保存文件"/"打开文件"对话框?
我有一个用于检查每日日志文件的书签.但是,我使用的书签仅以一位数的形式提供月和日,但日志文件使用两位数.
例如我的书签提供: HTTP://url/log/2009-5-4_localcontrol-story.log,而日志文件实际上住在: HTTP://url/log/2009-05-04_localcontrol-story.log
以下是我目前的代码:
javascript:d=new%20Date();window.open("http://url/log/"+d.getFullYear()+"-"+(d.getMonth()+1)+"-"+(d.getDate())+"_localcontrol-story.log",%20"_self");
你能不能告诉我这个改编,所以我把我的月份和日期用2位数字表示,如果有必要,可以使用前导零?
在CoffeeScript中,虽然此代码几乎与JavaScript相同:
tabs_html = "<div id='nm-container'><ul><li><a href='#tabs-1'>Guidelines</a></li><li><a href='#tabs-2'>Test</a></li></ul>
<div id='tabs-1'><p>something1</p></div><div id='tabs-2'><p>something2</p></div></div>"
$("#nm-toolbar").append(tabs_html)
$("#nm-container").tabs()
Run Code Online (Sandbox Code Playgroud)
它不起作用.有趣的是,它在尝试最后一行时起作用:$("#nm-container").tabs()从控制台.我附上下面的完整代码.请注意,我正在使用CoffeeMarklet生成似乎仅适用于chrome的bookmarklet.
s1 = window.document.createElement('script')
s1.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js'
window.document.body.appendChild(s1)
$ ->
s2 = window.document.createElement('script')
s2.src = 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.7/jquery-ui.min.js'
window.document.body.appendChild(s2)
jqueryUIcss = window.document.createElement('link')
jqueryUIcss.rel = 'stylesheet'
jqueryUIcss.type = 'text/css'
jqueryUIcss.href = 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.10/themes/blitzer/jquery-ui.css'
window.document.head.appendChild(jqueryUIcss)
if $("#nm-toolbar").length == 0
toolbar = "<div id='nm-toolbar'></div>"
$("body").append(toolbar)
$("#nm-toolbar").css({
'background': '#fafafa',
'height': '500px',
'width': '400px',
'position': 'fixed',
'bottom': '0px',
'right': '20px',
'padding': '5px'
})
tabs_html = "<div id='nm-container'><ul><li><a href='#tabs-1'>Guidelines</a></li><li><a href='#tabs-2'>Test</a></li></ul>
<div id='tabs-1'><p>something1</p></div><div id='tabs-2'><p>something2</p></div></div>" …Run Code Online (Sandbox Code Playgroud) 我正在制作一个中等复杂的Bookmarklet,它可以在Chrome中运行得很好,但我无法在Firefox中使用它.当我在Firefox中运行我的Bookmarklet时,它会重定向到仅true在其上显示的新页面.
我已经将原因缩小到一个非常具体的事情:当你将新函数暴露给全局命名空间时,Firefox似乎并不喜欢.
如果是这种情况,您可能对此有更多了解吗?这是否记录在任何地方,以便我可以了解更多信息?关于书签构建的细微差别的资源似乎很少,我找不到任何相关的东西.第二个问题是,是否有任何已知的解决方法.
对于一些例子(记住,测试它们只需将这些代码行复制到Firefox中的书签中.然后在任何页面上运行它们).
重定向书签
javascript:!function(){window.okay={test:function(){}}}();
非重定向书签
javascript:!function(){window.okay={test:!0}}();
有什么想法吗?谢谢!
目前,我计划在Knockout中使用手动订阅来获得我需要的功能.不过,知道这个问题的答案仍然很好.
我们正在运行一个快速的javascript函数来填写并保存表单,以便在工作流程中快速前进(用于测试目的).除了Firefox之外,它在所有浏览器中运行良好 - 并且仅在几个人的机器上运行.
javascript:!function(){$("#ruleDetailForm\\.authorizingStatutes").val("Test")}();
Run Code Online (Sandbox Code Playgroud)
脚本还有更多内容,但上面的示例会导致相同的问题.将它复制到URL栏或将其添加为书签都会导致显示"true"的空白页面而不是将"Test"复制到相关字段中.
相同的用户使用其他浏览器没有问题,其他人已经成功使用它在Firefox中工作.Firebug没有显示任何有用的东西,它们是最新版本的Firefox.
bookmarklet ×10
javascript ×9
firefox ×3
coffeescript ×1
date ×1
designmode ×1
google-docs ×1
greasemonkey ×1
jquery ×1
jquery-ui ×1
window.open ×1