完全透露我不知道Javascript,我试图得到这个Javascript:
javascript:location = 'http://validator.w3.org/check?uri=' +escape(location)&doctype=Inline&charset=detect+automatically&ss=1&group=0&user-agent=W3C_Validator/1.654';
Run Code Online (Sandbox Code Playgroud)
作为Bookmarklet工作,以发送此格式的URL:
http://validator.w3.org/check?uri=http://www.wordpress.org&charset=%28detect+automatically%29&doctype=Inline&ss=1&group=0&user-agent=W3C_Validator%2F1.654
Run Code Online (Sandbox Code Playgroud)
到W3C的指挥官.
我是用这个编码器对Javascript进行URL编码的,但当然,我做错了,无论是在我的Javascript中还是在编码过程中.
任何人都有一些关于Javascript bookmarklet和URL编码的特别或一般的想法?谢谢.
关于JS的新手.
我需要使用一个外部脚本来修改当前页面中的一些元素,将其作为书签进行访问.
如果我修改插入以下<script>行的网页的html源代码:
s=document.createElement('script');
s.type='text/javascript';
s.src='script.js';
document.getElementsByTagName('head')[0].appendChild(s);
Run Code Online (Sandbox Code Playgroud)
它工作正常.但是,如果我创建一个具有相同行的javascript:bookmarklet,我将获得一个包含以下字符串的空白页:
[object HTMLScriptElement]
Run Code Online (Sandbox Code Playgroud)
然而,如果我创建一个添加该行的书签
void(null);
Run Code Online (Sandbox Code Playgroud)
对于以前的网页,网页没有消失,但脚本没有执行.
为什么?
我只想通过向DOM添加脚本标记来加载GWT(Google Web Toolkit)应用程序,但是因为GWT链接器使用document.write()我无法找到任何好方法.我在各种博客文章中发现了一些黑客,但他们似乎都失败了最新版本的GWT.我想到任何合理的非侵入性方法吗?
澄清:
在主机html页面中启动GWT应用程序的常规方法:
<script type="text/javascript" language="javascript" src="myapp.nocache.js"></script>
Run Code Online (Sandbox Code Playgroud)
当然,这会在页面加载后立即启动.我想稍后再做:
function startapp() {
var head = document.getElementsByTagName('head');
var s = document.createElement('script');
s.setAttribute('type', 'text/javascript');
s.setAttribute('src', 'myapp.nocache.js');
head[0].appendChild(s);
}
Run Code Online (Sandbox Code Playgroud) 我是JS的新手.我试图让我成为一个书签,在网页上找到所有图像并为它们添加彩色边框.然后,通过单击图像我想附加图像路径.这是我到目前为止所得到的:
javascript:
for (var i= document.links.length; i-->0;) {
if (document.links[i].getElementsByTagName('img').length!=0) {
document.links[i].onclick= function() {
window.open("http://www.example.com/whatever?imgsrc=" + this.src + "");
};
}
}
Run Code Online (Sandbox Code Playgroud)
如何为图像添加边框?
谢谢,鲍勃
我希望我的bookmarklet要求用户登录.这是一个想法......我为用户创建了一个iframe登录,并显示了a/c信息.但我想从服务器获取一些信息,例如,我想知道用户是否已将此页面添加到我的服务器.所以,我想做一个ajax调用,但由于相同的源策略,我不能通过ajax来实现.那么,我如何从iframe获取信息?
故事是这样的:
用户网站 - >用户点击书签 - >如果登录 - >显示'添加到收藏夹'按钮 - >用户点击添加到收藏夹按钮,将网址提交给服务器,重新加载服务器.
用户网站 - >用户点击书签 - >如果没有记录 - >显示登录按钮 - >登录成功 - >按以前的方式执行流程
用户网站 - >用户点击书签 - >如果记录 - >检查网站是否已添加到服务器上 - >没有收藏夹按钮
如您所见,只有iframe存储登录用户的信息.
我注意到我的Javascript bookmarklet在某些网站上失败了,比如谷歌阅读器和谷歌搜索结果页面(在一些非谷歌网站上随机出现).看一下控制台,我可以看到,对于这些页面,单击bookmarklet并没有像往常那样将元素附加到头部/主体,而是创建了一个如下所示的新文档:
<html>
<head></head>
<body></body>
</html>
Run Code Online (Sandbox Code Playgroud)
即使我将书签缩小到javascript:alert(window.location.href);它,也会创建这个空白页面并在其中运行书签,以便显示警报about:blank.在大多数网站上,不会创建此空白页面并显示正确的位置.
有人可以解释一下吗?这些沙盒外部网站是否将代码作为安全措施?
更新:我目前无法在Chrome 17.0.932.0 dev以外的浏览器上重现这一点.如果其他人可以在Chrome或其他方面重现这些结果,请与我们联系.
我想找到或制作一个书签,它将使用W3C HTML 5验证器验证当前查看页面的html内容.
我找到了两个bookmarklet,我试图让一个像一个像一个有点像另一个,但我不知道如何做到这一点.
Chris Coyier有一个HTML5验证书签,除了使用页面URI之外,它运行良好,因此不适用于本地测试的站点:
javascript:(function(){%20function%20fixFileUrl(u)%20{%20var%20windows,u;%20windows%20=%20(navigator.platform.indexOf("Win")%20!=%20-1);%20%20/*%20chop%20off%20file:///,%20unescape%20each%20%hh,%20convert%20/%20to%20\%20and%20|%20to%20:%20*/%20%20u%20=%20u.substr(windows%20?%208%20:%207);%20u%20=%20unescape(u);%20if(windows)%20{%20u%20=%20u.replace(/\//g,"\");%20u%20=%20u.replace(/\|/g,":");%20}%20return%20u;%20}%20/*%20bookmarklet%20body%20*/%20var%20loc,fileloc;%20loc%20=%20document.location.href;%20if%20(loc.length%20>%209%20&&%20loc.substr(0,8)=="file:///")%20{%20fileloc%20=%20fixFileUrl(loc);%20if%20(prompt("Copy%20filename%20to%20clipboard,%20press%20enter,%20paste%20into%20validator%20form",%20fileloc)%20!=%20null)%20{%20document.location.href%20=%20"http://validator.w3.org/file-upload.html"%20}%20}%20else%20document.location.href%20=%20"http://validator.w3.org/check?uri="%20+%20escape(document.location.href);%20void(0);%20})();
Run Code Online (Sandbox Code Playgroud)
我也找到了这个,它通过抓取当前页面的html起作用,但我无法弄清楚如何使它做html5 ...在代码中有对doctype的引用,我试过将其更改为html5, html500等,并删除它完全希望它会自动检测..但无济于事:
javascript:(function(){var h=document;var b=h.doctype;var e="<!DOCTYPE "+b.name.toLowerCase()+' PUBLIC "'+b.publicId+'" "'+b.systemId+'">\n';var g=h.documentElement.outerHTML;var f="http://validator.w3.org/check";var i={prefill_doctype:"html401",prefill:0,doctype:"inline",group:0,ss:1,st:1,outline:1,verbose:1,fragment:e+g};var a=h.createElement("form");a.setAttribute("method","post");a.setAttribute("target","_blank");a.setAttribute("action",f);for(var j in i){var c=h.createElement("input");c.setAttribute("type","hidden");c.setAttribute("name",j);c.setAttribute("value",i[j]);a.appendChild(c)}if(navigator.appCodeName=="Mozilla"){h.body.appendChild(a)}a.submit()})();
Run Code Online (Sandbox Code Playgroud) 我需要
在我的网站http://jsbookmarklets.com/中为bookmarklet动态加载跨域JavaScript
文件
解决方案应满足:
我想获取当前正在执行的JavaScript代码的文件路径,以便动态加载更多资源(更多CSS文件和JS文件,如自定义代码和jQuery,jQuery UI和Ext JS库),这些文件存储在与JavaScript相同/相对的文件夹中小书签.
以下方法不适合我的问题:
var scripts = document.getElementsByTagName("script");
var src = scripts[scripts.length-1].src;
alert("THIS IS: "+src);
Run Code Online (Sandbox Code Playgroud)
相关问题不符合我的问题:
我正在尝试使用bookmarklet-loader和style-loader和css-loader 创建一个bookmarklet .但我无法将CSS导入我的书签.
这就是我所拥有的
webpack.config.js:
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
module.exports = {
entry: {
index: './src/index.js',
bookmarklet: './src/bookmarklets/bookmarklet.js'
},
output: {
filename: '[name].bundle.js',
path: path.resolve(__dirname, 'dist')
},
target: 'web',
module: {
rules: [
{
test: /\.css$/,
use: [
'style-loader',
'css-loader'
]
},
{
test: /\.js$/,
use: [
'bookmarklet-loader'
],
include: path.join(__dirname, './src/bookmarklets')
}
]
},
plugins: [
new CleanWebpackPlugin(['dist']),
new HtmlWebpackPlugin({
title: 'Development'
})
]
Run Code Online (Sandbox Code Playgroud)
SRC /书签工具/ bookmarklet.js:
import './css/style.css'; …Run Code Online (Sandbox Code Playgroud) 我正在制作一个书签,它创建href当前浏览器选项卡的链接并将其复制到剪贴板.这个书签在Safari中有效:
javascript:
!function(a){
var%20b=document.createElement("textarea"),
c=document.getSelection();
b.textContent=a,document.body.appendChild(b),
c.removeAllRanges(),b.select(),
document.execCommand("copy"),
c.removeAllRanges(),
document.body.removeChild(b)}
('<a%20title="'+document.title+'"%20href="'+document.location.href+'">'+document.title+'</a>');
Run Code Online (Sandbox Code Playgroud)
但是在Firefox 65中,我收到错误"document.execCommand('cut'/'copy')被拒绝,因为它没有从用户生成的短暂事件处理程序中调用." 在查看使用document.execCommand('copy')复制到剪贴板时失败并显示大文本我试图在函数之前生成链接的html,以解决答案中指出的问题.但是,使用下面的代码,我得到一个新的浏览器选项卡,文本为"true",没有复制到剪贴板的链接.
javascript:
const text = ('<a%20title="'+document.title+'"%20href="'+document.location.href+'">'+document.title+'</a>');
!function(a){
var%20b=document.createElement("textarea"),
c=document.getSelection();
b.textContent=a,document.body.appendChild(b),
c.removeAllRanges(),
b.select(),
document.execCommand("copy"),
c.removeAllRanges(),
document.body.removeChild(b)}('text');
Run Code Online (Sandbox Code Playgroud)
这是生成href链接的时间问题吗?或者是其他东西?
bookmarklet ×10
javascript ×10
security ×2
bookmarks ×1
cross-domain ×1
encoding ×1
firefox ×1
gwt ×1
html5 ×1
image ×1
jquery ×1
url ×1
validation ×1
webpack ×1