2013-08-21 3 views
1

페이지에 버튼을 추가하는 greasemonkey 스크립트가 있습니다. 클릭하면 버튼이 페이지에서 일부 정보를 긁어내어 str이라는 변수에 넣습니다.수많은 탭에 걸쳐 greasemonkey 출력을 저장하는 방법

지금은 제대로 작동하는 페이지에 변수를 인쇄하고 있습니다. 결국 여러 페이지에서이 파일을 만들어야합니다. 예를 들어

:

한 페이지로부터 출력 "ABCDEF"될 수 있으며 두 번째 페이지에서 'GHIJKL "입니다.

abcdef 
ghijkl 

가 자동으로 동일한 변수에이를 저장하는 방법이 바로 변수에 새 출력을 추가 유지 : 나는 수 있도록 텍스트 파일로 한 번에 그것을 하나를 복사입니까? greasemonkey에서 파일에 쓸 수 없다는 것을 알고 있지만,이 상황에서 무엇을 해야할지 실제로 알지 못합니다. 약 100 페이지가 있으므로 붙여 넣기를 100 번 복사하지 않으려합니다 (각 페이지를 열어 버튼을 클릭하면 문제가 없습니다).

// Create a new div to put the links in and append it to the content div 
links_div1 = document.createElement('div');//makes a div 
//links_div1.setAttribute('class', 'box generic_datatable dataTable');//makes it look the same as rest of page 
//links_div1.setAttribute('id', 'normal_wrapper'); 

//adds div to beginning of content section 
var node = document.getElementById('navHeaderCell'); 
var parentDiv = node.parentNode; 
parentDiv.insertBefore(links_div1,node); 

//makes buttons in new divs 
links_div1.innerHTML += '<table class="box generic_datatable dataTable" id="normal"><thead><tr class="colhead"><th></th></tr></thead><td>Scrape: <button type="button" id="btn_id">scrape</button></td></table>'; 

//makes them clickable 
addButtonListener(); 

function addButtonListener() { 
    //first div 
    document.getElementById("btn_id").addEventListener("click", function(){scrape()}, true); 
    //alert("function"); 
} 

function scrape() { 
    //alert(array); 
    str = array.join('$'); 
    links_div1.innerHTML += str; 

    } 



//collect all the values in a NodeList 
var linksToOpen = document.querySelectorAll ("#content_3col>table.form>tbody>tr>td.dash:nth-of-type(2)"); 

//alert(linksToOpen); 

//--- linksToOpen is a NodeList, we want an array of links... 
var array = []; 
for (var J = 0, numLinks = linksToOpen.length; J < numLinks; ++J) { 

    array.push (linksToOpen[J].innerHTML.replace(/<[^>]*>/g,'')); 

} 
+0

이 탭들은 동일한 도메인 또는 도메인 간입니까? 그것은 어떤 기술이 사용 가능한지에 큰 차이를 만듭니다. –

+0

동일한 도메인. 예 : http://www.worldportsource.com/ports/USA_AL_Bevill_Hook_Port_4839.php 및 http://www.worldportsource.com/ports/USA_AL_Port_of_Columbia_3562.php –

+0

이미 답변을 수락했는데이 도메인이 동일하므로 'GM_setValue'보다는'localStorage'를 사용해야합니다. 그렇게하면 훨씬 더 많은 데이터를 처리 할 수 ​​있고 브라우저가 다운되거나 다운 될 가능성이 줄어 듭니다. 탭은 또한 localStorage 변경 사항을 수신 할 수 있습니다. 파일 붙여 넣기에 대한 도움말은'GM_setClipboard'를 확인하십시오. –

답변

2

대부분의 UserScript 환경이 매우 유용

GM_setValueGM_getValue 기능을 제공 :

내 코드입니다.

경쟁 조건에주의해야하기 때문에 각 탭에 임의의 숫자 (아마도 시간 기준)를 생성하고 그 값에 따라 키에 내용을 넣으려는 유혹을 느낄 것입니다.

마지막으로 문자열을 연결하고 끝 부분에 잘라 붙일 수있는 큰 문자열 하나를 표시합니다.

또는 잘라 내기 및 붙여 넣기를 원치 않는 경우 막대한 문자열을 생성하고 HTML5 download attribute을 사용할 수 있습니다. 영업 이익의 의견에 따라

편집,

(테스트되지 않은, 즉석에서 입력했습니다.)

// The documentation talks about the second parametere here -- a default value. 
var value = GM_getValue("value", ""); 
value += str + "\n"; 
GM_setValue("value", value); 

모든 UserScript 방법은 그것을 이해해야하는 동안

는이있다 :

var value = GM_getValue("value"); 
if (value === undefined) { 
    value = ""; 
} 
value += str + "\n"; 
GM_setValue("value", value); 

또는 심지어 :

var value = GM_getValue("value") || ""; 
value += str + "\n"; 
GM_setValue("value", value); 
+0

그래서 나는 이것에 문제가있다. 나는 GM_setValue ("foo", GM_getValue ("foo") + "/ n"+ str);라고 생각했다. 그러나 나는 이상한 참조 에러를 얻고있다. 어떻게하면 변수가 존재하는지 검사하고, 변수가 존재하는지 테스트하고, 변수가 있으면 추가하고, 그렇지 않으면 추가로 만들 수 있습니까? –

+0

감사합니다! 나는 당신에게 투표권을 줄 수 있었으면 좋겠다.하지만 나는 명성이 14 점이다. –

관련 문제