1

Webページを更新して特定のフレーズまたはテキストを検索し、フレーズが見つかるか見つからない場合に停止する、ブラウザーで使用できるプログラム/拡張機能はありますか?

たとえば、ランダマイザーを使用して「One」、「Two」、「Three」という単語を循環させるサイトを作成したとします。

このプログラムは、「Three」という単語が見つかるまでページを更新し、その単語を見つけるように設定すると、見つかったら停止します。

また

このプログラムは、「Three」という単語が見つからなくなるまでページを更新し、その単語を見つけるように設定すると、見つからなくなると停止します。

curl と grep を使用してそれを実行できることはわかっていますが、ページが Web ブラウザーに読み込まれていません。これは私が望むものではありません。ブラウザにもロードできるソリューションがあるかどうかを確認します

そのようなものが存在しない場合、この種のプログラムを作成する方法について何か考えはありますか? それを行うにはどのツールを使用しますか?

4

1 に答える 1

0

これを行うための拡張機能を非常に簡単に作成できます。毎回ページを更新するのではなく、目的の結果が得られるまでデータをポーリングし、見つかったらページを更新することをお勧めします。私はそれに慣れているので、jQueryを使用した短い例:

マニフェスト.json

{
 "name": "Find Text",
 "version": "0.1",
 "description": "Find Text",
 "manifest_version": 2,
 "browser_action": {
   "default_icon": "on.png",
   "default_popup": "popup.html" 
 },
 "permissions": [
   "tabs","http://*/*","https://*/*"
 ],
 "background": {
    "scripts": ["bgp.js","jquery-1.8.3.min.js"],
    "persistent": true
 }
}

Popup.html

<!DOCTYPE html> 
<html>
  <head>
    <style>
      body { width: 300px; }
    </style>
    <script src="jquery-1.8.3.min.js"></script>
    <script src="popup.js"></script>
  </head>
  <body>
    <div>Desired Search Url</div>
    <input type="text" id="searchUrl">
    <div>Desired Search Text</div>
    <input type="text" id="searchText">
    <button id="searchButton">Search</button>
  </body>
</html>

Popup.js

$(function(){
  var tabId;
  chrome.tabs.query({active:true,currentWindow:true}, function(tab) {
    $('#searchUrl').val(tab[0].url);
    tabId = tab[0].id;
  });
  $('#searchButton').click(function(){
    chrome.extension.sendMessage({
      url:$('#searchUrl').val(),
      text:$('#searchText').val(),
      tab:tabId
    });
  });
});

bgp.js

chrome.extension.onMessage.addListener(function(message,sender,sendResponse){
  checkUrlForText(message.url,message.text,message.tab);
});
function checkUrlForText(url,text,tab){
  var contains;
  $.ajax({
    url:url,
    async:false, 
    success: function(data){
      contains = $(':contains('+text+')',data);
      while(contains.length == 0){
        $.ajax({
          url:url,
          async:false,
          success: function(dat){
            contains = $(':contains('+text+')',dat);
          }
        });
      }
    }
  });
  chrome.tabs.reload(tab);
}

毎回タブを更新する必要がある場合 (探しているものが見つかってからページが更新されるまでの間にコンテンツが変更される場合)、 を使用content scriptsして目的の値をテストし、メッセージをバックグラウンドに送信する必要があります。必要なテキストがない場合は、ページを更新してページを更新し、最初からやり直してください。このような:

bgp.js

var contains;
chrome.extension.onMessage.addListener(function(message,sender,sendResponse){
  checkTabForText(message.text,message.tab);
  contains = false;
});
function checkTabForText(text,tab){
  chrome.tabs.executeScript(tab,{file:"jquery-1.8.3.min.js"});
  chrome.tabs.executeScript(tab,{file:"checkText.js"},function(){
    chrome.tabs.sendMessage(tab, {text:text}, function(response){
      contains = response.contains;
      if(!contains){
        chrome.tabs.reload(tab,function(){
          checkTabForText(text,tab);
        });          
      }
    });
  });    
}

checkText.js

chrome.extension.onMessage.addListener(function(message,sender,sendResponse){
  var contains = $(':contains('+message.text+')');
  if(contains.length > 0)
   sendResponse({contains:true});
  else
   sendResponse({contains:false});
});
于 2013-03-21T20:21:49.603 に答える