某些网站使用“创意”(javascript?)超链接破坏了浏览器的功能,例如ctrl + click或单击中键的链接可以在新选项卡中打开它们。
一个常见的例子是taleo HR网站 http://www.rogers.com/web/Careers.portal?_nfpb=true&_pageLabel=C_CP&_page=9
不管我尝试什么,我都只能通过正常单击链接来跟踪它们。我无法在新窗口中打开它们。有没有办法解决?
某些网站使用“创意”(javascript?)超链接破坏了浏览器的功能,例如ctrl + click或单击中键的链接可以在新选项卡中打开它们。
一个常见的例子是taleo HR网站 http://www.rogers.com/web/Careers.portal?_nfpb=true&_pageLabel=C_CP&_page=9
不管我尝试什么,我都只能通过正常单击链接来跟踪它们。我无法在新窗口中打开它们。有没有办法解决?
Answers:
您的问题是针对Taleo的,所以我的答案也是如此:)
我已经编写了一个UserScript,它可以实现您想要的功能:它将所有JavaScript链接替换为普通链接,因此您可以单击它们,也可以在新选项卡中打开它们。
// ==UserScript==
// @name Taleo Fix
// @namespace https://github.com/raphaelh/taleo_fix
// @description Taleo Fix Links
// @include http://*.taleo.net/*
// @include https://*.taleo.net/*
// @version 1
// @grant none
// ==/UserScript==
function replaceLinks() {
var rows = document.getElementsByClassName("titlelink");
var url = window.location.href.substring(0, window.location.href.lastIndexOf("/") + 1) + "jobdetail.ftl";
for (var i = 0; i < rows.length; i++) {
rows[i].childNodes[0].href = url + "?job=" + rows[i].parentNode.parentNode.parentNode.parentNode.parentNode.id;
}
}
if (typeof unsafeWindow.ftlPager_processResponse === 'function') {
var _ftlPager_processResponse = unsafeWindow.ftlPager_processResponse;
unsafeWindow.ftlPager_processResponse = function(f, b) {
_ftlPager_processResponse(f, b);
replaceLinks();
};
}
if (typeof unsafeWindow.requisition_restoreDatesValues === 'function') {
var _requisition_restoreDatesValues = unsafeWindow.requisition_restoreDatesValues;
unsafeWindow.requisition_restoreDatesValues = function(d, b) {
_requisition_restoreDatesValues(d, b);
replaceLinks();
};
}
您可以在这里找到它:https : //github.com/raphaelh/taleo_fix/blob/master/Taleo_Fix.user.js
是。您可以为Greasemonkey(Firefox)或Tampermonkey(Chrome)编写自己的脚本
对于您提到的示例,此Tampermonkey UserScript会将搜索结果中的所有JavaScript链接设置为在新标签页/窗口中打开(这取决于浏览器配置,这对我来说是标签页)。
// ==UserScript==
// @name open links in tabs
// @match http://rogers.taleo.net/careersection/technology/jobsearch.ftl*
// ==/UserScript==
document.getElementById('ftlform').target="_blank"
尽管您可以编写更通用的版本,但是很难在不破坏其他可用性的情况下为所有JavaScript链接启用此功能。
一个中间路径可以是为设置事件处理程序Ctrl,只要按住该键,它将将所有表单的目标临时设置为“ _blank”。
这是另一个用户脚本,该脚本将具有onclick="document.location='some_url'"
属性的任何元素包装在一个<a href=some_url>
元素中并删除onclick
。
我是为特定站点编写的,但它的通用性足以使其对他人有用。不要忘记更改下面的@match URL。
当链接通过AJAX调用(因此是MutationObserver)加载时,此方法有效。
// ==UserScript==
// @name JavaScript link fixer
// @version 0.1
// @description Change JavaScript links to open in new tab/window
// @author EM0
// @match http://WHATEVER-WEBSITE-YOU-WANT/*
// @grant none
// ==/UserScript==
var modifyLink = function(linkNode) {
// Re-create the regex every time, otherwise its lastIndex needs to be reset
var linkRegex = /document\.location\s*=\s*\'([^']+)\'/g;
var onclickText = linkNode.getAttribute('onclick');
if (!onclickText)
return;
var match = linkRegex.exec(onclickText);
if (!match) {
console.log('Failed to find URL in onclick text ' + onclickText);
return;
}
var targetUrl = match[1];
console.log('Modifying link with target URL ' + targetUrl);
// Clear onclick, so it doesn't match the selector, before modifying the DOM
linkNode.removeAttribute('onclick');
// Wrap the original element in a new <a href='target_url' /> element
var newLink = document.createElement('a');
newLink.href = targetUrl;
var parent = linkNode.parentNode;
newLink.appendChild(linkNode);
parent.appendChild(newLink);
};
var modifyLinks = function() {
var onclickNodes = document.querySelectorAll('*[onclick]');
[].forEach.call(onclickNodes, modifyLink);
};
var observeDOM = (function(){
var MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
return function(obj, callback) {
if (MutationObserver) {
var obs = new MutationObserver(function(mutations, observer) {
if (mutations[0].addedNodes.length || mutations[0].removedNodes.length)
callback();
});
obs.observe(obj, { childList:true, subtree:true });
}
};
})();
(function() {
'use strict';
observeDOM(document.body, modifyLinks);
})();