1

Chrome拡張機能からコンテンツスクリプトを実行しているページの変数であるオブジェクトにアクセスするだけで済みます。Chrome拡張機能を使用してページオブジェクトにアクセスする

私は、コンテンツスクリプトと注入スクリプトが実行され、注入されたスクリプトを使用していくつかの変数を取得し、それらを返すことができる環境とその孤立した世界について知っています。

この質問に関する他の回答を検索しましたが、ほとんどの変数は他のタイプの変数で動作し、基本的な方法ですが、現在はオブジェクトにアクセスできません。

現在の解決策または回避策はありますか?

編集:私は使用した溶液:

コンテンツスクリプト:

//Sends an object from the page to the background page as a string 
window.addEventListener("message", function(message) { 
    if (message.data.from == "myCS") { 
     chrome.runtime.sendMessage({ 
      siteObject: message.data.prop 
     }); 
    } 
}); 
var myScript = document.createElement("script"); 
myScript.innerHTML = 'window.postMessage({from: "myCS", prop: JSON.stringify(OBJECT)},"*");'; 
document.body.appendChild(myScript); 

Background.js:

//Info receiver 
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) { 

    //When the content script sends the sites object to extract the needed data 
    if (message.siteObject !== undefined) { 
     console.log(message.siteObject); 
     //Process the data 
    } 

}); 

答えて

1

scriptタグをページに挿入して、オブジェクトにアクセスすることができます。必要に応じて、メッセージングを使用して内線番号と通信することができます。たとえば、あなたがあなたのページにアクセスしたいオブジェクトがpageObjectと呼ばれていると仮定すると:

content1.js

//this code will add a new property to the page's object 
var myOwnData = "createdFromContentScript"; 
var myScript = document.createElement("script"); 
myScript.innerHTML = "pageObject.myOwnData = " + myOwnData; 
document.body.appendChild(myScript); 

content2.js

//this code will read a property from the existing object and send it to background page 

window.addEventListener("message", function(message) { 
    if (message.data.from == "myCS") { 
     chrome.runtime.sendMessage({theProperty: message.data.prop}); 
    } 
}); 

var myScript = document.createElement("script"); 
myScript.innerHTML = 'window.postMessage({from: "myCS", prop: pageObject.existingProperty},"*");'; 
document.body.appendChild(myScript); 
+0

は、私はまた、このアプローチを試してみましたそれにもかかわらず、私はこの正確なコードをコピーしてオブジェクトを置き換えただけですが、未知のReferenceError:myObject.propertyはまだ定義されていません。 –

+0

私は 'content2.js'のコードを編集しました。この方法で、 'pageObject.existingProperty'をあなたが探している実際のオブジェクトとプロパティに置き換えてみてください。 –

+0

'Uncaught TypeError: 'window'に 'postMessage'を実行できませんでした:2つの引数は必要ですが、1つしか存在しません。 ' –

0

いいえ、方法はありません。セキュリティのために孤立した世界があり、本当に必要な場合に拡張機能がコンテンツのスクリプトと変数をハックする可能性のある回避策が存在するという点はありません。

おそらく、ページ上のオブジェクトがページとやりとりしたり、ページに何らかの影響を与えたり、ページ上の何かが変数の状態に影響を及ぼすとします。その変数の状態を変更する可能性のある(DOMを介して)ページ上でアクションをトリガすることはできますが、変数に直接アクセスする方法を探すのはやめてください。

もちろん、ページの作者が協力していれば、それは別のボールゲームです。作者のスクリプト、ゲッターとセッターの仕組みにメカニズムが提供されています。しかし、どういうわけか私はあなたが何をしているのか疑う。

関連する問題