2016-07-08 10 views
18

मैं CasperJS (/ PhantomJS) की नकली नेविगेटर प्लेटफ़ॉर्म संपत्ति चाहता हूं। मैं पृष्ठ लोड पर नेविगेटर वस्तु अधिलेखन की आसान समाधान है जो वेब पर कई अन्य स्थानों में सुझाव दिया है पाया:नकली नेविगेटर गुण

casper.on('page.initialized', function(){ 
    this.evaluate(function(){ 
     (function(oldNav){ 
      var newNav = {}; 
      [].forEach.call(Object.getOwnPropertyNames(navigator), function(prop){ 
       if (prop === 'platform') { 
        Object.defineProperty(newNav, prop, { 
         value: 'Win64' 
        }); }else { 
        Object.defineProperty(newNav, prop, { 
         get: function(){ 
          return oldNav[prop]; 
         } 
        }); 
       } 
      }); 
      window.navigator = newNav; 
     })(window.navigator); 
    }); 
}); 

लेकिन समस्या यह है कि अगर हम एक Iframe से नेविगेटर गुण प्राप्त, मूल्यों अभी भी कर रहे हैं मूल एक क्योंकि, पृष्ठ.in प्रारंभिक केवल इसे मुख्य पृष्ठ के लिए सेट करता है। इसलिए मैंने इसे अपने स्रोत कोड में बदलने और इसे फिर से बनाने का विकल्प चुना। मैंने गिट रेपो से फ़ैंटोमज डाउनलोड किए, और मैंने एक हार्डकोडेड प्लेटफ़ॉर्म मान (मेरे मामले के लिए लिनक्स x86_64) की खोज की। मुझे ./phantomjs/src/qt/qtwebkit/Source/WebCore/platform/qt/UserAgentQt.cpp

में हार्डकोडेड स्ट्रिंग मिली, मैंने इसे उस स्ट्रिंग में बदल दिया जिसे मैं नेविगेटर.प्लेटफार्म के रूप में वापस लौटना चाहता था, लेकिन यह नेविगेटर.प्लाफ़ॉर्म को प्रभावित नहीं करता था। मुझे इसे कहां बदलना चाहिए? क्या यह (मंच) एक harcoded स्ट्रिंग है या यह गतिशील रूप से बनाया गया है?

+0

मैं कैंसर बदलने या फ़ैंटॉमजेएस के अपने संस्करण के निर्माण के बजाय कुछ विधियों को ओवरराइट करने का सुझाव दूंगा। शायद आपके पास अपने Google समूह https://groups.google.com/forum/#!forum/casperjs – CSchulz

+0

में अपने प्रश्न पूछने के लिए और अधिक भाग्य है आपकी टिप्पणी के लिए धन्यवाद। मैंने वह किया। – Alex

+0

शायद आप अपना समाधान उत्तर के रूप में पोस्ट कर सकते हैं। – CSchulz

उत्तर

3

कोड समीक्षा करने के बाद, मुझे पता चला है कि निम्न फ़ाइल को बदला जाना चाहिए:

src/qt/qtwebkit/Source/WebCore/page/NavigatorBase.cpp 

और NavigatorBase::platform() वांछित स्ट्रिंग आप navigator.platform के रूप में लौटा दी चाहते हैं करने के लिए सेट किया जाना चाहिए। लेकिन मुझे यकीन नहीं है कि यह अन्य चीजों को गड़बड़ कर देगा, अगर यह उचित समाधान नहीं है तो कृपया सुझाव दें।

संबंधित मुद्दे