2013-01-15 8 views
14

मैं एक बुकमार्कलेट लिखना चाहता हूं जो किसी भी वेबपृष्ठ को संशोधित करेगा ताकि जब उस पृष्ठ पर जावास्क्रिप्ट कोड document.location = 'http://site.tld' या document.location.href = 'http://site.tld' जैसा कुछ होगा स्थान बदलने के बजाय एक नया टैब या विंडो खोलें; जैसे कोड window.open('http://site.tld') था;दस्तावेज को संशोधित करें। वर्तमान टैब में नेविगेशन के बजाय एक नया टैब/विंडो खोला गया है

क्या मैं इस लक्ष्य को प्राप्त करने के लिए प्रोटोटाइप को किसी भी तरह संशोधित कर सकता हूं? (मैं लापरवाही से इस शब्द का उपयोग करता हूं क्योंकि यद्यपि मैंने प्रोटोटाइप को कुछ बार संशोधित करने के बारे में पढ़ा है, मैंने वास्तव में इसे कभी नहीं किया है।) या क्या कोई और तरीका है?

उत्तर

8

आपने यह नहीं कहा कि आप किस ब्राउज़र का उपयोग कर रहे हैं, लेकिन केवल जिस तरह से मैं इसे पूरा करने के बारे में सोच सकता हूं फ़ायरफ़ॉक्स के Object.watch का उपयोग कर रहा हूं।

document.watch('location', function(prop, oldval, newval) { 
    window.open(newval); 
    return '#'; 
}); 

यह document.location स्थापित करने के लिए, एक ही तर्क के बजाय के साथ एक खिड़की खोलें, और फिर बजाय '#' को असाइनमेंट परिवर्तित (जो कुछ भी है, आमतौर पर काम हो जाएगा) किसी भी प्रयास पर हस्तक्षेप होगा।

बुकमार्कलेट रूप में, और दोनों document.location और window.location को कवर करने के लिए विस्तारित:

javascript:(function(){var handle=function(prop, oldval, newval){window.open(newval); return '#';};document.watch('location',handle);window.watch('location',handle);})(); 

लेकिन फिर भी इस document.location.href असाइनमेंट के खिलाफ काम नहीं करेगा; स्थान वस्तु कुछ खास चीज है जो Object.watch पर काम करने से इंकार कर देती है।

अगर वह पर्याप्त नहीं है, तो आप onbeforeunload इस्तेमाल कर सकते हैं संकेत देने के लिए जब आप बाहर नेविगेट और इसे रद्द (यदि है कि अपने लक्ष्य को यहाँ है) की कोशिश करो।

सबसे अच्छा मुझे मिल गया है, क्षमा करें!

+0

एक आदर्श जवाब है, लेकिन कोई भी कुछ और बेहतर प्रदान करता है, तो , आपको बक्षीस मिलेगा। एफवाईआई, 'onbeforeunload' उपयोगी नहीं है जब तक कि मैं किसी भी तरह से नहीं जानता कि कौन सी यूआरएल नई विंडो में खुलती है। बस नेविगेशन को रोकना लक्ष्य नहीं है। नया टैब मजबूर करना है। लेकिन वैसे भी इसका उल्लेख करने के लिए धन्यवाद। –

1

यदि आप असाइनमेंट के बजाए फ़ंक्शन कॉल करते हैं तो आप केवल प्रोटोटाइप के साथ कुछ कर सकते हैं। उदाहरण के लिए document.write

document.write = function(txt) { 
    alert("txt"); 
}; 

document.write("test"); 
2

मैंने विभिन्न तरीकों का प्रयास किया लेकिन लक्ष्य विंडो के href का पता लगाना लगभग असंभव है।

window.onbeforeunload = function(e) { 
    window.open(document.location.href); 
}; 

का उपयोग अन्य टैब और वर्तमान विंडो में लक्ष्य में अपने वर्तमान विंडो खुलेगा। समस्या यह है कि ऑनबेरनलोड न केवल विंडो के स्थान को बदलने पर, विंडो बंद करने या इसे रीफ्रेश करने पर भी ट्रिगर किया जाता है। निर्भर करता है कि आप इसका उपयोग कहां करना चाहते हैं।

पुनश्च:

window.onunload = function() { 
    document.location = document.location; 
} 

यदि आप इस परीक्षण, जब आप पेज स्थान बदलने के लिए, आप एक पल तो आप अपने वर्तमान पृष्ठ पर पुनः निर्देशित किया जाएगा के लिए पता बार में new यूआरएल को देखने के लिए सक्षम हो जाएगा । मैं नया लक्ष्य प्राप्त करने में कामयाब नहीं रहा। सौभाग्य!

3

मैं ES5 Object.defineProperty उपयोग करने का सुझाव लिए जा रहा था, लेकिन के रूप में यह होना चाहिए, document.location एक है "विन्यास: गलत" वस्तु है, जिसका अर्थ है कि यह बदला नहीं जा सकता।जिज्ञासु के लिए, यदि आप इसे बदल कर सकेंगे कोड इस तरह होगा:

Object.defineProperty(document.location, 'href', { 
    get: function() { return this.href }, 
    set: function(value) { this.href = value; window.open(value); return false} //Not sure about this part, but anyways... 
}); 

संपादित करें: अपने प्रश्न का उत्तर देना, मुझे नहीं लगता है कि यह एक bookmarlet के माध्यम से प्राप्त है।

+0

इसके लिए धन्यवाद। वैसे भी सीखना अच्छा लगा। सिद्धांत रूप में, यदि ऐसा करना संभव था, तो क्या नए फ़ंक्शन के अंदर "मूल" दस्तावेज़। स्थान एक्सेस करना संभव होगा? –

+0

क्या आपको लगता है कि मूल का मतलब है? उपर्युक्त कोड के साथ क्या खुशी होगी कि जब location.href को सेट किया गया था (href = "http://google.com") सेट फ़ंक्शन ट्रिगर करेगा, जिसे परिभाषित किया जा रहा है और एक नई विंडो खोलने के लिए .href मान सेट करना होगा। – Bruno

-1

FWIW: यह एक नए टैब में चयनित पाठ के लिए खोज करने के लिए नवीनतम फ़ायरफ़ॉक्स पर काम करता है:

जावास्क्रिप्ट: तस्वीरें = document.getSelection(); अगर (QR!) {शून्य (QR = शीघ्र (' कीवर्ड ... ',' '))}, अगर (QR) window.open ("http://google.com/search?query=" + बच (QR)); शून्य (0)

नहीं
संबंधित मुद्दे