Gọi hàm Javascript từ URL / thanh địa chỉ


112

Có thể gọi một hàm javascript từ URL không? Về cơ bản, tôi đang cố gắng tận dụng các phương thức JS trong một trang mà tôi không có quyền truy cập vào nguồn.

Cái gì đó như: http://www.example.com/mypage.aspx?javascript:printHelloWorld()

Tôi biết nếu bạn đưa javascript:alert("Hello World");vào thanh địa chỉ, nó sẽ hoạt động.

Tôi nghi ngờ câu trả lời cho điều này là không nhưng, chỉ tự hỏi liệu có cách nào để làm điều đó không.


3
URL của bạn sẽ phải hiển thị hành vi nào - bạn có muốn thực thi Javascript trong ngữ cảnh của trang web đó không?
Pekka

http:đầu URI cho trình duyệt biết "Tôi muốn bạn thực hiện một yêu cầu HTTP", vì vậy yêu cầu HTTP sẽ thực hiện. Không có cách nào xung quanh nó, tôi nghĩ.
Constantin

7
Nếu tôi dán javascript:alert("Hi");vào thanh địa chỉ Firefox (28.0) và nhấn Enter, không có gì xảy ra. Có thể điều này đã bị vô hiệu hóa? ... Vâng, rõ ràng nó đã bị vô hiệu hóa vì những kẻ ngốc có thể bị thuyết phục để dán bất kỳ thứ gì vào thanh địa chỉ của họ. Tìm thấy thông tin ở đây: stackoverflow.com/a/18782801/111036
mivk

1
sao chép dán không hoạt động, nhưng nếu bạn nhập nó, nó hoạt động, có vẻ như nó không bị vô hiệu hóa, nhưng được phân tích cú pháp khi dán.
Bhabani Sankar Mishra

1
Lưu ý: nó chỉ hoạt động trong Firefox khi 1. bạn đang ở trên một trang thực tế (không trống) và 2. bạn đặt "javascript:" một cách rõ ràng trước nó.
Andrew

Câu trả lời:


59

Không có từ một siêu liên kết, không. Không trừ khi trang có tập lệnh bên trong cụ thể cho việc này và nó đang kiểm tra một số thông số .... nhưng đối với câu hỏi của bạn, không, không có hỗ trợ tích hợp trong trình duyệt cho việc này.

Tuy nhiên, có những bookmarklet mà bạn có thể đánh dấu để chạy nhanh các hàm JavaScript từ thanh địa chỉ của mình; không chắc liệu điều đó có đáp ứng nhu cầu của bạn hay không, nhưng nó gần như đạt được.


5
Về cơ bản, tôi đang cố gắng tận dụng các phương thức JS trong một trang mà tôi không có quyền truy cập vào nguồn.
DazManCat

27

Viết vào thanh địa chỉ

javascript:alert("hi");

Hãy chắc chắn rằng bạn viết trong đầu: javascript:


1
Nó không hoạt động trên Google Chrome Phiên bản 80.0.3987.132 (Bản dựng chính thức) (64-bit). Chrome tự động javascript:tách tiền tố khỏi thanh địa chỉ.
stomy

2
@stomy Rất tiếc, bạn cần phải nhập javascript:thủ công
wjandrea

24

Bạn có thể sử dụng URI dữ liệu. Ví dụ: data:text/html,<script>alert('hi');</script>

Để biết thêm thông tin, hãy truy cập: https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs


1
tôi luôn luôn nghĩ url dữ liệu chỉ dành cho hình ảnh, nhờ điều này thực sự tuyệt vời :)
Fareed Alnamrouti

2
bạn không thể nối nó vào một url.
vivek_23

Một số trình duyệt có thể ngăn chặn điều này với một thông điệp:Navigation to toplevel data: URI not allowed (Blocked loading of: “data:text/html,<script>alert('hi');</script>”)
Aleksandr Ryabov

Nó hoạt động trên Google Chrome Phiên bản 80.0.3987.132 (Bản dựng chính thức) (64-bit).
stomy

nó hoạt động trong Chrome 80.0.3987.162 (Official Build) (64-bit)và ngoàiFirefox 72.0.2 (64 bit)
Alex Pandrea

6

/test.html#alert('heello ')

test.html
<button onClick="eval(document.location.hash.substring(1))">do it</button>

13
Lưu ý rằng việc đánh giá đầu vào của người dùng này là một thực hành rất nguy hiểm và thường không được phép.
domenukk

6
Vâng, điều này khá điên rồ. Có những nơi làm việc mà bạn sẽ bị sa thải vì kiểu điên rồ này.
Jacob

6
Điều này dẫn đến các vấn đề liên quan đến tập lệnh trên nhiều trang web (XSS) như được chỉ ra bởi @domenukk.
pavanw3b

6

bạn cũng có thể đặt theo dõi

<a href='javascript:alert("hello world!");'>Click me</a>

vào mã html của bạn và khi bạn nhấp vào siêu liên kết 'Nhấp vào tôi', javascript sẽ xuất hiện trong thanh url và hộp thoại Cảnh báo sẽ hiển thị


5
javascript sẽ xuất hiện trong url-bar trong trình duyệt nào? Tôi chưa bao giờ thấy chúng. (Tôi biết javascript: liên kết làm việc, tôi chỉ nói về thanh URL)
Sean Patrick Floyd

Không có I. Tôi biết bạn có thể gõ JS vào thanh địa chỉ
DazManCat

Đây là những gì tôi đang tìm kiếm, cái này gọi là gì?
ThorSummoner

4

Giới thiệu về thuộc window.location.hashtính:

Trả lại phần liên kết của URL.


Ví dụ 1:

//Assume that the current URL is 

var URL = "http://www.example.com/test.htm#part2";

var x = window.location.hash;

//The result of x will be:

x = "#part2"

Bản đồ 2:

$(function(){   
    setTimeout(function(){
        var id = document.location.hash;
        $(id).click().blur();
    }, 200);
})

Ví dụ 3:

var hash = "#search" || window.location.hash;
window.location.hash = hash; 

switch(hash){   
case "#search":  
    selectPanel("pnlSearch");
    break;    
case "#advsearch":    

case "#admin":  

}

3

Sử dụng câu trả lời của Eddy hoạt động rất tốt vì tôi cũng gặp phải vấn đề tương tự. Chỉ cần gọi url của bạn với các tham số: "www.mypage.html # myAnchor"

Sau đó, trong mypage.html:

$(document).ready(function(){
  var hash = window.location.hash;
  if(hash.length > 0){
    // your action with the hash
  }
});

2

bạn có thể sử dụng như trường hợp này: ví dụ: bạn có một trang: http://www.example.com/page.php sau đó trong page.php đó, hãy chèn mã này:

if (!empty($_GET['doaction']) && $_GET['doaction'] == blabla ){
echo '<script>alert("hello");</script>';
}

sau đó, bất cứ khi nào bạn truy cập url này: http://www.example.com/page.php?doaction=blabla

thì cảnh báo sẽ tự động được gọi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.