最近我越来越多地看到一种技术(例如 CNNSI.com)是对所选文本的 AJAX 记录。这是有道理的——如果你检测到用户一遍又一遍地选择这些术语,你可能会假设你的访问者正在谷歌、雅虎等网站上搜索该术语。我已经使用我最喜欢的 JavaScript 库、MooTools 和另一个库复制了这个功能JavaScript 库,jQuery。
MooTools JavaScript
window.addEvent('domready',function(){ //gets the selected text var getSelection = function() { return $try( function() { return window.getSelection(); }, function() { return document.getSelection(); }, function() { var selection = document.selection && document.selection.createRange(); if(selection.text) { return selection.text; } return false; } ) || false; }; //event to listen var selectRequest = new Request({ url: 'ajax-selection-copy.php', method: 'post' }); $('content-area').addEvent('mouseup',function(e) { var selection = getSelection(); if(selection && (selection = new String(selection).replace(/^\s+|\s+$/g,''))) { selectRequest.send('selection=' + encodeURI(selection)); } }); });
第一步是尝试在我们指定的容器内的 mouseup 期间抓取选定的文本。如果我们找到文本选择,我们会向 PHP 脚本发出 AJAX 请求,该脚本将保存文本选择。
jQuery JavaScript
/* attempt to find a text selection */ function getSelected() { if(window.getSelection) { return window.getSelection(); } else if(document.getSelection) { return document.getSelection(); } else { var selection = document.selection && document.selection.createRange(); if(selection.text) { return selection.text; } return false; } return false; } /* create sniffer */ $(document).ready(function() { $('#content-area').mouseup(function() { var selection = getSelected(); if(selection && (selection = new String(selection).replace(/^\s+|\s+$/g,''))) { $.ajax({ type: 'post', url: 'ajax-selection-copy.php', data: 'selection=' + encodeURI(selection) }); } }); });
翻译成 jQuery 的 MooTools 代码。
PHP
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' && $selection = trim($_POST['selection'])) { mysql_query('INSERT INTO text_selections (selection,date_selected) VALUES(\''.mysql_escape_string(stripslashes($selection)).'\',NOW())'); }
上面的PHP代码非常原始。根据您的系统设置(PHP 框架、安全设置等),您将需要实施额外的措施来防止对该脚本的攻击。
记录文本选择是发现您的受众感兴趣的主题和/或术语的好方法。您可能还想在帖子中提供有关这些术语的更多信息。
您对此有何看法?你认为这太像 Spyjax 了吗?完全可以吗?