标签: bookmarklet

基于 window.location.href 的条件 URL 附加或重定向的 Javascript

我正在尝试制作一个书签,单击该书签时将检查当前选项卡/窗口的 URL,以查看它是否包含“char1”和/或“char2”(给定字符)。如果两个字符都存在,它将重定向到另一个 URL,对于另外两个字符,它将分别附加当前 URL。

我相信一定有一种比下面的更优雅的方式来说明这一点(到目前为止对我来说效果很好),但我对 Javascript 不太了解。我的(笨拙且重复的)工作代码(抱歉):

if (window.location.href.indexOf('char1') != -1 &&
    window.location.href.indexOf('char2') != -1)
{
    window.location="https://website.com/";
}
else if (window.location.href.indexOf('char1') != -1)
{
    window.location.assign(window.location.href += 'append1');
}
else if (window.location.href.indexOf('char2') != -1)
{
    window.location.assign(window.location.href += 'append2');
}
Run Code Online (Sandbox Code Playgroud)

完全符合我的需要,但是,嗯……至少可以说不太优雅。

有没有更简单的方法来做到这一点,也许使用变量或伪对象?或者更好的代码?

javascript url bookmarklet append conditional-statements

5
推荐指数
1
解决办法
1万
查看次数

如何“反编译”书签?

我们都知道小书签只不过是一些可执行的 JavaScript 代码,当我们单击它们时,它们会根据它们想要执行的功能为我们做一些事情......我的问题是:

例如,我有一个书签,不知道,像这样:

javascript:void(window.open('http://www.pdfdownload.org/web2pdf/Default.aspx?left=0&right=0&top=0&bottom=0&page=0&cURL='+document.location.href));
Run Code Online (Sandbox Code Playgroud)

据我了解,书签代码(带有“&cURL=”的东西)获取浏览器地址栏中的URL,然后用它做一些事情以获得结果。通过更改小书签中的一些参数(例如“Google 地图中的搜索选择”)和其他一些参数,可以通过选择来完成类似的操作。

如何“反编译”小书签以使其从表单中获取所需的数据(在本例中为 URL)?

例如,假设我想在网页中使用上述小书签来提供一个表单,让用户输入 URL,然后单击按钮获取结果。

我见过其他书签从“?input=”获取 URL,而其他书签则从“?url=”获取 URL

如何将小书签的功能传递给表单?

html javascript forms bookmarklet

5
推荐指数
1
解决办法
631
查看次数

小书签帮助:创建查找/替换小书签

我正在尝试对此进行稍微修改,以便它提示输入要搜索的文本,然后提示要替换的文本,当所有处理完成后,显示一个对话框,让我知道它已完成。

我计划在 phpmyadmin 数据库编辑页面上使用它,该页面将有任意数量的填充文本的文本框(这是我需要它在 中搜索和替换的内容)。另外,要搜索和替换的文本可能是也可能不是多行,因此我在正则表达式中添加了“m”参数,而且,由于我将进行可能包含 html 的搜索/替换,因此它们里面经常会有引号/双引号。前任:

搜索:

<img height="76" width="92" src="http://www.gifs.net/Animation11/Hobbies_and_Entertainment/Games_and_Gambling/Slot_machine.gif" /></div>
<div class="rtecenter"> <strong><em><font color="#ff0000">Vegas Baby!<br />
</font></em></strong></div>
Run Code Online (Sandbox Code Playgroud)

也许什么都不替换(只是为了删除所有代码),或者其他一些 html。到目前为止,这是我想出的小书签(javascript,尤其是小书签不是我经常弄乱的东西),但是,它在查找/替换方面没有任何作用,尽管它确实正确地进行了提示。

javascript:var%20scrEl=document.createElement('script');scrEl.setAttribute('language','javascript');scrEl.setAttribute('type','text/javascript');scrEl.setAttribute('src','http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js');function%20htmlreplace(a,b,element){if(!element)element=document.body;var%20nodes=$(element).contents().each(function(){if(this.nodeType==Node.TEXT_NODE){var%20r=new%20RegExp(a,'gim');this.textContent=this.textContent.replace(r,b);}else{htmlreplace(a,b,this);alert('Done%20processing.');}});}htmlreplace(prompt('Text%20to%20find:',''),prompt('Replace%20with:',''));
Run Code Online (Sandbox Code Playgroud)

有人有主意吗?

javascript replace bookmarklet

5
推荐指数
1
解决办法
5109
查看次数

Javascript Bookmarklet 获取当前 URL

如何使用可在小书签中使用的 JavaScript 代码获取当前 URL?此代码不起作用:

javascript:copy(window.location.href);
Run Code Online (Sandbox Code Playgroud)

它需要将其复制到剪贴板。我需要支持 Firefox、Chrome 和 IE

javascript url clipboard copy bookmarklet

5
推荐指数
2
解决办法
8323
查看次数

如何将 URL 编码为 CakePHP 参数

我想创建一个用于添加书签的书签。因此,您只需单击Bookmark this Page书签中的JavaScript 代码段,您就会被重定向到该页面。

这是我当前的书签:

"javascript: location.href='http://…/bookmarks/add/'+encodeURIComponent(document.URL);"
Run Code Online (Sandbox Code Playgroud)

当我在 Bookmarklet 页面上单击它时,这会给我一个这样的 URL:

http://localhost/~mu/cakemarks/bookmarks/add/http%3A%2F%2Flocalhost%2F~mu%2Fcakemarks%2Fpages%2Fbookmarklet
Run Code Online (Sandbox Code Playgroud)

但是服务器不喜欢这样:

The requested URL /~mu/cakemarks/bookmarks/add/http://localhost/~mu/cakemarks/pages/bookmarklet was not found on this server.
Run Code Online (Sandbox Code Playgroud)

这给出了所需的结果,但对我的用例来说毫无用处:

http://localhost/~mu/cakemarks/bookmarks/add/test-string
Run Code Online (Sandbox Code Playgroud)

正在进行 CakePHP 典型的 mod_rewrite,它应该将最后一部分转换为我的BookmarksController::add($url = null)操作的参数。

我究竟做错了什么?

javascript php cakephp bookmarklet url-rewriting

5
推荐指数
1
解决办法
2468
查看次数

如果在设定的时间范围内没有检测到活动,Javascript 书签/iFrame 会自动刷新加载的页面?

我有一个我在工作中使用的基于浏览器的应用程序(实际上所有公司应用程序现在都基于浏览器,原因很明显),它的会话超时时间很短。我不确定会话超时的确切设置,但大约是 5-10 分钟。

不可避免地,每当我必须使用它时,会话已超时,我将信息输入应用程序,提交它,然后页面加载一个全新的会话,而没有实际传递任何信息 - 我得到的只是一个新的会议。然后我必须重新输入信息并再次提交,以便让它真正提取我想要的内容。当然,我可以先刷新页面然后输入信息,但我不知道会话是否超时,有时它运行得很慢,所以这是浪费时间。我们的开发团队无法预见这样的小事不仅令人讨厌,但当你考虑到浪费的时间(我为一家非常大的公司工作)只是等待被炸毁的东西重新加载,然后如果预刷新时不得不重新输入提交的信息时,最终也会花费我们很多钱被遗忘了,因为它通常发生在我之外。在某个时候,我希望成为程序员和我们的客户服务机构之间的联络人。

无论如何,我离题了。

我想要做的是:我想创建一个 Javascript 书签或其他东西,如果在特定时间范围内未检测到活动,它将自动刷新它碰巧所在的任何页面。与我最终确定会话超时是什么相比,这个时间范围有点短。基本上,如果在那段时间内没有活动,我只想让页面每隔五分钟重新加载一次。(我不希望它突然刷新,因为在我使用应用程序的过程中时间已经到了,它应该进行自动刷新的唯一时间是应用程序页面一直处于空闲状态)

这可以用 Javascript 书签完成吗?我应该编写一个页面“包装器”,在 iFrame 或类似的东西中加载应用程序页面?我使用的应用程序站点有许多子页面,如果发生自动刷新超时,我希望它刷新我当时碰巧所在的任何页面。当然,如果这是不可能的,我会接受它只是重新加载主站点页面,如果这不容易实现,因为如果我离开应用程序的时间足够长以至于超时发生,那么我可能不需要仍然在我当时所在的任何帐户/页面上。

希望我已经很好地解释了自己。逻辑很简单 -if no activity detected withing x amount of time, refresh the current page是它的要点。

谢谢我的 StackOverflow 兄弟们,再次感谢您的帮助。

-Sootah


由于我无法影响页面本身的编码,因此我必须尽可能使用最简单的解决方案。一个对上次刷新/页面加载进行计时然后在达到超时时刷新同一页面的书签将是完美的。

如果这是不可能的,那么如果我可以编写一个简单的页面,我可以从本地计算机运行该页面,该页面可以通过将页面加载到框架或其他可接受的内容来执行相同的功能。


EDIT 10/3/11 7:25am MST
Run Code Online (Sandbox Code Playgroud)

由于我在坟墓工作并且工作时间安排很奇怪(不幸的是,这个网站被封锁在那里,因为它被认为是一个“论坛”——我在金融界工作,他们对信息泄露过于谨慎)在我授予赏金之前,有一个这些事件检测器中的一个检测页面上次加载的时间/?像 document.onload 之类的东西。我认为从上次加载页面时设置计时器将是最简单和最有效的方法。我的鼠标可能会移到浏览器上,因为我在处理其他事情时无意中打开了网站,如果计时器因此重置而我实际上没有以页面加载/重新加载的方式与网站进行交互,则会话超时。

javascript iframe bookmarklet session-state session-timeout

5
推荐指数
1
解决办法
4695
查看次数

如何使用JavaScript在IE 6 7 8 9中分离事件

这是部分代码,而不是完整版.

我有一个突出显示特定html元素的荧光笔mouse hovers.

我也有click event and listener.

我的问题是:highlighter event/listener使用Internet Explorerv6 v7 v8 v9 时不会分离

我究竟做错了什么?

这是我如何附加事件并启动事件监听器:

if (document.body.addEventListener) {
                        //alert(11);
                        document.body.addEventListener('mousemove', handler, false);
                    } else if (document.body.attachEvent) {
                        //alert(12);
                        var ff=function(e) {
                            return handler(e || window.event);
                        };
                        //alert(ff);
                        document.body.attachEvent('onmousemove', ff);
                    } else {
                        //alert(13);
                        document.body.onmousemove = handler;
                    }
Run Code Online (Sandbox Code Playgroud)

这就是我停止onmousemove/mouse事件/监听器的方法:

if (document.body.removeEventListener) {
                    document.body.removeEventListener('mousemove', handler, false);
                } else if (document.body.detachEvent) {
                    document.body.detachEvent('onmousemove', function(e) {
                        return handler(e || window.event);
                    });
                } else {
                    document.body.removeAttribute("onmousemove"); …
Run Code Online (Sandbox Code Playgroud)

javascript bookmarklet javascript-events

5
推荐指数
1
解决办法
9260
查看次数

用于在 Google 电子表格中保存 URL 的书签

我想创建一个简单的书签,它获取当前网页“location.ref”的 URL 并将其保存在 Google 电子表格中。保存后,我想留在当前网页上。

我所知道的写入 Google 电子表格的唯一方法是使用 Google App Script。所以我写了一个简单的脚本来做到这一点:

function doGet(request) {
  var ss = SpreadsheetApp.openByUrl( "https://docs.google.com/spreadsheet/ccc?key=<MY-SPREADSHEET-ID>");

 var sheet = ss.getSheets()[0];
 var headers = ["Timestamp", "url"];

 var nextRow = sheet.getLastRow(); 
 var cell = sheet.getRange('a1');
 var col = 0;
 for (i in headers){
    if (headers[i] == "Timestamp"){
       val = new Date();
    } else {
       val = request.parameter[headers[i]]; 
    }
    cell.offset(nextRow, col).setValue(val);
    col++;
 }



   return ContentService.createTextOutput(request.parameter.url)
   .setMimeType(ContentService.MimeType.TEXT);
}
Run Code Online (Sandbox Code Playgroud)

我将其发布为 webapp。我写了书签:

<a href="javascript:(

   function(){ 
     alert(window.open('https://script.google.com/macros/s/<MYWEBAPP>/exec?url='+encodeURIComponent(location.href), '_self')); 

   }

  )();"> 

BOOKMARK

</a>
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好。当我单击书签时,它实际上可以工作,它会抓取当前网页的 URL …

post bookmarklet google-apps-script

5
推荐指数
1
解决办法
1700
查看次数

调用在书签内创建的函数

我正在尝试编写一个书签,它将 JSONP 调用添加到这样的页面中:

javascript:(function(){
var myFunction = (window.function(data){alert('my function is firing with arg' + data)});
var j = 'http://localhost/jsonscript.js';
var s = document.createElement('script');
s.src = j;
document.getElementsByTagName('head')[0].appendChild(s);
})();
Run Code Online (Sandbox Code Playgroud)

附加到页面中的脚本 src 包含

myFunction('foo');
Run Code Online (Sandbox Code Playgroud)

但是当我单击书签时出现错误 - myFunction 未定义。我如何“导出”该功能超出我的书签范围,以便从附加的脚本标签调用时它可以工作?

编辑:我发现我可以使用原始 JavaScript 打包脚本元素的 innerHTML。这有效,但很丑陋。我还是想找出更好的方法。

javascript scope bookmarklet

5
推荐指数
1
解决办法
1336
查看次数

在书签中使用本地存储

我非常喜欢使用带有小脚本的书签。

例如,我在 Reddit 上编辑了这篇文章中的注释编辑脚本,以通过本地存储自动保存和加载最后一条注释。

...

window.addEventListener("load", function () {
    div.innerHTML = localStorage.getItem("note");
}, false);
document.body.addEventListener("keyup", debounce(function () {
     localStorage.setItem("note", div.innerHTML);
}, 760));
...
Run Code Online (Sandbox Code Playgroud)

如果我将 html 文档作为存储在硬盘上的实际 html 文档打开,它运行得很好。但是,当我使用在代码(缩小)版本中粘贴的 URL 栏运行它时data: text/html, ...,出现NS_ERROR_NOT_AVAILABLE:错误。这是有道理的,因为本地存储是域绑定的。

有没有办法让本地存储与书签一起使用?

完整的注释代码可在此处找到,请注意,如果您将其保存在本地硬盘上,则此代码将起作用。因此,您可以为其添加书签并根据需要使用它。

html javascript bookmarklet

5
推荐指数
1
解决办法
2605
查看次数